﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-java fans-随笔分类-java学习</title><link>http://www.blogjava.net/jlin/category/53793.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 30 Jan 2019 04:07:44 GMT</lastBuildDate><pubDate>Wed, 30 Jan 2019 04:07:44 GMT</pubDate><ttl>60</ttl><item><title>java.lang.ClassCastException 两个一样的类不能强转</title><link>http://www.blogjava.net/jlin/archive/2019/01/30/433626.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Wed, 30 Jan 2019 03:30:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2019/01/30/433626.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/433626.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2019/01/30/433626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/433626.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/433626.html</trackback:ping><description><![CDATA[<div>系统报错： java.lang.ClassCastException: com.entity.Job cannot be cast to com.entity.Job<br /><br />spring boot 项目引入了 spring的devtools 经常会产生这个问题&nbsp; ，当把这个引入取消就不会出现了</div><div></div><div>&nbsp;<span style="white-space:pre">	</span>&lt;dependency&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;artifactId&gt;spring-boot-devtools&lt;/artifactId&gt;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/dependency&gt;&nbsp;</div><div></div><div></div><img src ="http://www.blogjava.net/jlin/aggbug/433626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2019-01-30 11:30 <a href="http://www.blogjava.net/jlin/archive/2019/01/30/433626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bean复制的几种框架性能比较（Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier）(转)</title><link>http://www.blogjava.net/jlin/archive/2017/07/25/432690.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Tue, 25 Jul 2017 13:53:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2017/07/25/432690.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/432690.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2017/07/25/432690.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/432690.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/432690.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作为一个新员工，一个首要的工作就是阅读别人的代码，阅读代码的诸多好处就不说了，我就直奔主题，通过预读代码，发现了几种实现两个不同类型的Bean之间实现值复制的几种方式，上网查询后发现性能上会有差异，于是就萌生自己深入了解几种实现的想法。第一步就是先本着实事求是的原则去探求一下大家总结出来的性能差异是否正确。&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;比较的是四种复制的方式，分...&nbsp;&nbsp;<a href='http://www.blogjava.net/jlin/archive/2017/07/25/432690.html'>阅读全文</a><img src ="http://www.blogjava.net/jlin/aggbug/432690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2017-07-25 21:53 <a href="http://www.blogjava.net/jlin/archive/2017/07/25/432690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DecimalFormat对数值格式化的舍入问题——RoundingMode--转</title><link>http://www.blogjava.net/jlin/archive/2017/02/28/432344.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Tue, 28 Feb 2017 03:14:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2017/02/28/432344.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/432344.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2017/02/28/432344.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/432344.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/432344.html</trackback:ping><description><![CDATA[<h4><span style="color: #3333ff;">背景</span>：</h4><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">在对数值做一些计算的时候，往往我们需要控制计算结果的精度，所以会使用到DecimalFormat类来将数值格式化成字符串。在最近<a href="http://lib.csdn.net/base/softwaretest" title="软件测试知识库" target="_blank" style="color: #df3434; text-decoration: none; font-weight: bold;">测试</a>中，突然注意到默认使用DecimalFormat进行格式化时，并非我们一般认识上的四舍五入，而是一种诡异的舍入&#8212;&#8212;(1)5以下舍去(2)5以上舍入(3)若前一位是奇数，5就舍入(4)如前一位是偶数，5就舍去</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">遇到这样的统计结论，没有理论的支持，我们总是感到很迷茫，所以我仔细查阅了DecimalFormat相关API，终于找到了答案。</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><h4><a name="t1" style="color: rgb(202, 0, 0);"></a><span style="color: #3333ff;">分析</span>：</h4><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">在DecimalFormat API中有这样一段：</p><table border="1" cellspacing="1" cellpadding="1" width="710" style="color: #000000; font-family: Arial; font-size: 14px; line-height: 26px; width: 710px; height: 90px; background-color: #ffffff;"><tbody><tr><td><p style="margin: 0px; padding: 0px;">舍入</p><p style="margin: 0px; padding: 0px;"><code>DecimalFormat</code>&nbsp;提供&nbsp;<code>RoundingMode</code>&nbsp;中定义的舍入模式进行格式化。默认情况下，它使用<code>RoundingMode.HALF_EVEN</code>。</p></td></tr></tbody></table><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">这句话指出了舍入模式有多种类型，而DecimalFormat默认采用了<code>RoundingMode.HALF_EVEN</code>这种类型，接下来，我们就一起看看，到底存在哪些舍入类型吧</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><h4><a name="t2" style="color: rgb(202, 0, 0);"></a><span style="color: #3333ff;">RoundingMode介绍</span>：</h4><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;"><code>RoundingMode</code>是一个枚举类，有一下几个常量：UP，DOWN，CEILING，FLOOR，HALF_UP，HALF_DOWN，HALF_EVEN，UNNECESSARY</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><hr style="font-family: Arial; line-height: 26px; background-color: #ffffff;" /><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><h5><a name="t3" style="color: rgb(202, 0, 0);"></a>UP</h5><pre style="white-space: pre-wrap; word-wrap: break-word; line-height: 26px; background-color: #ffffff;">public static final RoundingMode <strong>UP</strong></pre><dl style="font-family: Arial; line-height: 26px; background-color: #ffffff;"><dd>远离零方向舍入的舍入模式。始终对非零舍弃部分前面的数字加 1。注意，此舍入模式始终不会减少计算值的绝对值。<p style="margin: 0px; padding: 0px;">示例：</p><table border="1"><tbody><tr valign="top"><th>输入数字</th><th>使用&nbsp;<tt>UP</tt>&nbsp;舍入模式<br />将输入数字舍入为一位数</th></tr><tr align="right"><td>5.5</td><td>6</td></tr><tr align="right"><td>2.5</td><td>3</td></tr><tr align="right"><td>1.6</td><td>2</td></tr><tr align="right"><td>1.1</td><td>2</td></tr><tr align="right"><td>1.0</td><td>1</td></tr><tr align="right"><td>-1.0</td><td>-1</td></tr><tr align="right"><td>-1.1</td><td>-2</td></tr><tr align="right"><td>-1.6</td><td>-2</td></tr><tr align="right"><td>-2.5</td><td>-3</td></tr><tr align="right"><td>-5.5</td><td>-6</td></tr></tbody></table><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;">&nbsp;</p><p style="margin: 0px; padding: 0px;"></p></dd></dl><hr style="font-family: Arial; line-height: 26px; background-color: #ffffff;" /><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><h5><a name="t4" style="color: rgb(202, 0, 0);"></a>DOWN</h5><pre style="white-space: pre-wrap; word-wrap: break-word; line-height: 26px; background-color: #ffffff;">public static final RoundingMode <strong>DOWN</strong></pre><dl style="font-family: Arial; line-height: 26px; background-color: #ffffff;"><dd>向零方向舍入的舍入模式。从不对舍弃部分前面的数字加 1（即截尾）。注意，此舍入模式始终不会增加计算值的绝对值。<p style="margin: 0px; padding: 0px;">示例：</p><table border="1"><tbody><tr valign="top"><th>输入数字</th><th>使用&nbsp;<tt>DOWN</tt>&nbsp;舍入模式<br />将输入数字舍入为一位数</th></tr><tr align="right"><td>5.5</td><td>5</td></tr><tr align="right"><td>2.5</td><td>2</td></tr><tr align="right"><td>1.6</td><td>1</td></tr><tr align="right"><td>1.1</td><td>1</td></tr><tr align="right"><td>1.0</td><td>1</td></tr><tr align="right"><td>-1.0</td><td>-1</td></tr><tr align="right"><td>-1.1</td><td>-1</td></tr><tr align="right"><td>-1.6</td><td>-1</td></tr><tr align="right"><td>-2.5</td><td>-2</td></tr><tr align="right"><td>-5.5</td><td>-5</td></tr></tbody></table><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;">&nbsp;</p><p style="margin: 0px; padding: 0px;"></p></dd></dl><hr style="font-family: Arial; line-height: 26px; background-color: #ffffff;" /><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><h5><a name="t5" style="color: rgb(202, 0, 0);"></a>CEILING</h5><pre style="white-space: pre-wrap; word-wrap: break-word; line-height: 26px; background-color: #ffffff;">public static final RoundingMode <strong>CEILING</strong></pre><dl style="font-family: Arial; line-height: 26px; background-color: #ffffff;"><dd>向正无限大方向舍入的舍入模式。如果结果为正，则舍入行为类似于&nbsp;<tt>RoundingMode.UP</tt>；如果结果为负，则舍入行为类似于&nbsp;<tt>RoundingMode.DOWN</tt>。注意，此舍入模式始终不会减少计算值。<p style="margin: 0px; padding: 0px;">示例：</p><table border="1"><tbody><tr valign="top"><th>输入数字</th><th>使用&nbsp;<tt>CEILING</tt>&nbsp;舍入模式<br />将输入数字舍入为一位数</th></tr><tr align="right"><td>5.5</td><td>6</td></tr><tr align="right"><td>2.5</td><td>3</td></tr><tr align="right"><td>1.6</td><td>2</td></tr><tr align="right"><td>1.1</td><td>2</td></tr><tr align="right"><td>1.0</td><td>1</td></tr><tr align="right"><td>-1.0</td><td>-1</td></tr><tr align="right"><td>-1.1</td><td>-1</td></tr><tr align="right"><td>-1.6</td><td>-1</td></tr><tr align="right"><td>-2.5</td><td>-2</td></tr><tr align="right"><td>-5.5</td><td>-5</td></tr></tbody></table><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;">&nbsp;</p><p style="margin: 0px; padding: 0px;"></p></dd></dl><hr style="font-family: Arial; line-height: 26px; background-color: #ffffff;" /><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><h5><a name="t6" style="color: rgb(202, 0, 0);"></a>FLOOR</h5><pre style="white-space: pre-wrap; word-wrap: break-word; line-height: 26px; background-color: #ffffff;">public static final RoundingMode <strong>FLOOR</strong></pre><dl style="font-family: Arial; line-height: 26px; background-color: #ffffff;"><dd>向负无限大方向舍入的舍入模式。如果结果为正，则舍入行为类似于&nbsp;<tt>RoundingMode.DOWN</tt>；如果结果为负，则舍入行为类似于<tt>RoundingMode.UP</tt>。注意，此舍入模式始终不会增加计算值。<p style="margin: 0px; padding: 0px;">示例：</p><table border="1"><tbody><tr valign="top"><th>输入数字</th><th>使用&nbsp;<tt>FLOOR</tt>&nbsp;舍入模式<br />将输入数字舍入为一位数</th></tr><tr align="right"><td>5.5</td><td>5</td></tr><tr align="right"><td>2.5</td><td>2</td></tr><tr align="right"><td>1.6</td><td>1</td></tr><tr align="right"><td>1.1</td><td>1</td></tr><tr align="right"><td>1.0</td><td>1</td></tr><tr align="right"><td>-1.0</td><td>-1</td></tr><tr align="right"><td>-1.1</td><td>-2</td></tr><tr align="right"><td>-1.6</td><td>-2</td></tr><tr align="right"><td>-2.5</td><td>-3</td></tr><tr align="right"><td>-5.5</td><td>-6</td></tr></tbody></table><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;">&nbsp;</p><p style="margin: 0px; padding: 0px;"></p></dd></dl><hr style="font-family: Arial; line-height: 26px; background-color: #ffffff;" /><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><h5><a name="t7" style="color: rgb(202, 0, 0);"></a>HALF_UP</h5><pre style="white-space: pre-wrap; word-wrap: break-word; line-height: 26px; background-color: #ffffff;">public static final RoundingMode <strong>HALF_UP</strong></pre><dl style="font-family: Arial; line-height: 26px; background-color: #ffffff;"><dd>向最接近数字方向舍入的舍入模式，如果与两个相邻数字的距离相等，则向上舍入。如果被舍弃部分 &gt;= 0.5，则舍入行为同&nbsp;<tt>RoundingMode.UP</tt>；否则舍入行为同<tt>RoundingMode.DOWN</tt>。注意，此舍入模式就是通常学校里讲的四舍五入。<p style="margin: 0px; padding: 0px;">示例：</p><table border="1"><tbody><tr valign="top"><th>输入数字</th><th>使用&nbsp;<tt>HALF_UP</tt>&nbsp;舍入模式<br />将输入数字舍入为一位数</th></tr><tr align="right"><td>5.5</td><td>6</td></tr><tr align="right"><td>2.5</td><td>3</td></tr><tr align="right"><td>1.6</td><td>2</td></tr><tr align="right"><td>1.1</td><td>1</td></tr><tr align="right"><td>1.0</td><td>1</td></tr><tr align="right"><td>-1.0</td><td>-1</td></tr><tr align="right"><td>-1.1</td><td>-1</td></tr><tr align="right"><td>-1.6</td><td>-2</td></tr><tr align="right"><td>-2.5</td><td>-3</td></tr><tr align="right"><td>-5.5</td><td>-6</td></tr></tbody></table><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;">&nbsp;</p><p style="margin: 0px; padding: 0px;"></p></dd></dl><hr style="font-family: Arial; line-height: 26px; background-color: #ffffff;" /><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><h5><a name="t8" style="color: rgb(202, 0, 0);"></a>HALF_DOWN</h5><pre style="white-space: pre-wrap; word-wrap: break-word; line-height: 26px; background-color: #ffffff;">public static final RoundingMode <strong>HALF_DOWN</strong></pre><dl style="font-family: Arial; line-height: 26px; background-color: #ffffff;"><dd>向最接近数字方向舍入的舍入模式，如果与两个相邻数字的距离相等，则向下舍入。如果被舍弃部分 &gt; 0.5，则舍入行为同&nbsp;<tt>RoundingMode.UP</tt>；否则舍入行为同<tt>RoundingMode.DOWN</tt>。<p style="margin: 0px; padding: 0px;">示例：</p><table border="1"><tbody><tr valign="top"><th>输入数字</th><th>使用&nbsp;<tt>HALF_DOWN</tt>&nbsp;舍入模式<br />将输入数字舍入为一位数</th></tr><tr align="right"><td>5.5</td><td>5</td></tr><tr align="right"><td>2.5</td><td>2</td></tr><tr align="right"><td>1.6</td><td>2</td></tr><tr align="right"><td>1.1</td><td>1</td></tr><tr align="right"><td>1.0</td><td>1</td></tr><tr align="right"><td>-1.0</td><td>-1</td></tr><tr align="right"><td>-1.1</td><td>-1</td></tr><tr align="right"><td>-1.6</td><td>-2</td></tr><tr align="right"><td>-2.5</td><td>-2</td></tr><tr align="right"><td>-5.5</td><td>-5</td></tr></tbody></table><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;">&nbsp;</p><p style="margin: 0px; padding: 0px;"></p></dd></dl><hr style="font-family: Arial; line-height: 26px; background-color: #ffffff;" /><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><h5><a name="t9" style="color: rgb(202, 0, 0);"></a>HALF_EVEN</h5><pre style="white-space: pre-wrap; word-wrap: break-word; line-height: 26px; background-color: #ffffff;">public static final RoundingMode <strong>HALF_EVEN</strong></pre><dl style="font-family: Arial; line-height: 26px; background-color: #ffffff;"><dd>向最接近数字方向舍入的舍入模式，如果与两个相邻数字的距离相等，则向相邻的偶数舍入。如果舍弃部分左边的数字为奇数，则舍入行为同<tt>RoundingMode.HALF_UP</tt>；如果为偶数，则舍入行为同<tt>RoundingMode.HALF_DOWN</tt>。注意，在重复进行一系列计算时，此舍入模式可以在统计上将累加错误减到最小。此舍入模式也称为&#8220;银行家舍入法&#8221;，主要在美国使用。此舍入模式类似于 Java 中对<tt>float</tt>&nbsp;和<tt>double</tt>&nbsp;算法使用的舍入策略。<p style="margin: 0px; padding: 0px;">示例：</p><table border="1"><tbody><tr valign="top"><th>输入数字</th><th>使用&nbsp;<tt>HALF_EVEN</tt>&nbsp;舍入模式<br />将输入数字舍入为一位数</th></tr><tr align="right"><td>5.5</td><td>6</td></tr><tr align="right"><td>2.5</td><td>2</td></tr><tr align="right"><td>1.6</td><td>2</td></tr><tr align="right"><td>1.1</td><td>1</td></tr><tr align="right"><td>1.0</td><td>1</td></tr><tr align="right"><td>-1.0</td><td>-1</td></tr><tr align="right"><td>-1.1</td><td>-1</td></tr><tr align="right"><td>-1.6</td><td>-2</td></tr><tr align="right"><td>-2.5</td><td>-2</td></tr><tr align="right"><td>-5.5</td><td>-6</td></tr></tbody></table><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;">&nbsp;</p></dd></dl><hr style="font-family: Arial; line-height: 26px; background-color: #ffffff;" /><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp;</p><h5><a name="t10" style="color: rgb(202, 0, 0);"></a>UNNECESSARY</h5><pre style="white-space: pre-wrap; word-wrap: break-word; line-height: 26px; background-color: #ffffff;">public static final RoundingMode <strong>UNNECESSARY</strong></pre><dl style="font-family: Arial; line-height: 26px; background-color: #ffffff;"><dd>用于断言请求的操作具有精确结果的舍入模式，因此不需要舍入。如果对生成精确结果的操作指定此舍入模式，则抛出&nbsp;<tt>ArithmeticException</tt>。<p style="margin: 0px; padding: 0px;">示例：</p><table border="1"><tbody><tr valign="top"><th>输入数字</th><th>使用&nbsp;<tt>UNNECESSARY</tt>&nbsp;舍入模式<br />将输入数字舍入为一位数</th></tr><tr align="right"><td>5.5</td><td>抛出&nbsp;<tt>ArithmeticException</tt></td></tr><tr align="right"><td>2.5</td><td>抛出&nbsp;<tt>ArithmeticException</tt></td></tr><tr align="right"><td>1.6</td><td>抛出&nbsp;<tt>ArithmeticException</tt></td></tr><tr align="right"><td>1.1</td><td>抛出&nbsp;<tt>ArithmeticException</tt></td></tr><tr align="right"><td>1.0</td><td>1</td></tr><tr align="right"><td>-1.0</td><td>-1</td></tr><tr align="right"><td>-1.1</td><td>抛出&nbsp;<tt>ArithmeticException</tt></td></tr><tr align="right"><td>-1.6</td><td>抛出&nbsp;<tt>ArithmeticException</tt></td></tr><tr align="right"><td>-2.5</td><td>抛出&nbsp;<tt>ArithmeticException</tt></td></tr><tr align="right"><td>-5.5</td><td>抛出&nbsp;<tt>ArithmeticException</tt></td></tr></tbody></table><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;"></p><p style="margin: 0px; padding: 0px;">&nbsp;<br /><br /><br /></p><div>http://blog.csdn.net/alanzyy/article/details/8465098</div></dd></dl><img src ="http://www.blogjava.net/jlin/aggbug/432344.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2017-02-28 11:14 <a href="http://www.blogjava.net/jlin/archive/2017/02/28/432344.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 多线程中的任务分解机制-ForkJoinPool例子</title><link>http://www.blogjava.net/jlin/archive/2016/12/21/432163.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Wed, 21 Dec 2016 14:37:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2016/12/21/432163.html</guid><description><![CDATA[<p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;"><span style="font-size: 18px;">一、任务分解问题和ForkJoinPool简介</span></p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;"><span style="font-size: 18px;">&nbsp; &nbsp; &nbsp; &nbsp;在多线程并发编程中，有时候会遇到将大任务分解成小任务再并发执行的场景。<a href="http://lib.csdn.net/base/java" title="Java 知识库" target="_blank" style="color: #df3434; text-decoration: none; font-weight: bold;">Java&nbsp;</a>8新增的ForkJoinPool很好的支持了这个问题。</span></p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;"><span style="font-size: 18px;">&nbsp; &nbsp; &nbsp; &nbsp;ForkJoinPool是一种支持任务分解的线程池，当提交给他的任务&#8220;过大&#8221;，他就会按照预先定义的规则将大任务分解成小任务，多线程并发执行。</span></p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;"><span style="font-size: 18px;">&nbsp; &nbsp; &nbsp; 一般要配合可分解任务接口ForkJoinTask来使用，ForkJoinTask有两个实现它的抽象类：RecursiveAction和RecursiveTask，其区别是前者没有返回值，后者有返回值。</span></p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="font-size: 18px;">下面通过具体代码，来示范两个问题：（1）怎么定义可分解的任务类 （2）如何使用ForkJoinPool<br /><br /></span>







</p><p class="p1"><span class="s1">package</span> demo.thread.fork;</p><p class="p2"><br /></p><p class="p1"><span class="s1">import</span> java.util.Random;</p><p class="p1"><span class="s1">import</span> java.util.concurrent.ExecutionException;</p><p class="p1"><span class="s1">import</span> java.util.concurrent.ForkJoinPool;</p><p class="p1"><span class="s1">import</span> java.util.concurrent.Future;</p><p class="p1"><span class="s1">import</span> java.util.concurrent.RecursiveTask;</p><p class="p2"><br /></p><p class="p1"><span class="s1">public</span> <span class="s1">class</span> ForkJoinPoolDemo {</p><p class="p2"><br /></p><p class="p1"><span class="Apple-tab-span">	</span><span class="s1">public</span> <span class="s1">static</span> <span class="s1">void</span> main(String[] <span class="s2">args</span>) <span class="s1">throws</span> InterruptedException, ExecutionException {</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">int</span> <span class="s2">arr</span>[] = <span class="s1">new</span> <span class="s1">int</span>[100];</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>Random <span class="s2">random</span> = <span class="s1">new</span> Random();</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">int</span> <span class="s2">total</span> = 0;</p><p class="p3"><span class="s3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></span>// 初始化100个数字元素</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">for</span> (<span class="s1">int</span> <span class="s2">i</span> = 0; <span class="s2">i</span> &lt; <span class="s2">arr</span>.<span class="s4">length</span>; <span class="s2">i</span>++) {</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">int</span> <span class="s2">temp</span> = <span class="s2">random</span>.nextInt(100);</p><p class="p3"><span class="s3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></span>// 对数组元素赋值,并将数组元素的值添加到total总和中</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s2">total</span> += (<span class="s2">arr</span>[<span class="s2">i</span>] = <span class="s2">temp</span>);</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>}</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>System.<span class="s4">out</span>.println(<span class="s5">"初始化时的总和="</span> + <span class="s2">total</span>);</p><p class="p3"><span class="s3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></span>// 创建包含Runtime.getRuntime().availableProcessors()返回值作为个数的并行线程的ForkJoinPool</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>ForkJoinPool <span class="s2">forkJoinPool</span> = <span class="s1">new</span> ForkJoinPool();</p><p class="p3"><span class="s3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></span>// 提交可分解的PrintTask任务</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>Future&lt;Integer&gt; <span class="s2">future</span> = <span class="s2">forkJoinPool</span>.submit(<span class="s1">new</span> SumTaskDemo(<span class="s2">arr</span>, 0,</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s2">arr</span>.<span class="s4">length</span>));</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>System.<span class="s4">out</span>.println(<span class="s5">"计算出来的总和="</span> + <span class="s2">future</span>.get());</p><p class="p3"><span class="s3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></span>// 关闭线程池</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s2">forkJoinPool</span>.shutdown();</p><p class="p1"><span class="Apple-tab-span">	</span>}</p><p class="p1">}</p><p class="p2"><br /></p><p class="p3">// RecursiveTask为ForkJoinTask的抽象子类，有返回值的任务</p><p class="p1"><span class="s1">class</span> SumTaskDemo <span class="s1">extends</span> RecursiveTask&lt;Integer&gt; {</p><p class="p2"><br /></p><p class="p1"><span class="Apple-tab-span">	</span><span class="s1">private</span> <span class="s1">static</span> <span class="s1">final</span> <span class="s1">long</span> <span class="s4">serialVersionUID</span> = 4033241174438751063L;</p><p class="p3"><span class="s3">	</span>// 每个"小任务"最多只打印20个数</p><p class="p4"><span class="s3">	</span>private<span class="s3"> </span>static<span class="s3"> </span>final<span class="s3"> </span>int<span class="s3"> </span><span class="s4">MAX</span><span class="s3"> = 20;</span></p><p class="p4"><span class="s3">	</span>private<span class="s3"> </span>int<span class="s3"> </span><span class="s4">arr</span><span class="s3">[];</span></p><p class="p4"><span class="s3">	</span>private<span class="s3"> </span>int<span class="s3"> </span><span class="s4">start</span><span class="s3">;</span></p><p class="p4"><span class="s3">	</span>private<span class="s3"> </span>int<span class="s3"> </span><span class="s4">end</span><span class="s3">;</span></p><p class="p2"><br /></p><p class="p1"><span class="Apple-tab-span">	</span>SumTaskDemo(<span class="s1">int</span> <span class="s2">arr</span>[], <span class="s1">int</span> <span class="s2">start</span>, <span class="s1">int</span> <span class="s2">end</span>) {</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">this</span>.<span class="s4">arr</span> = <span class="s2">arr</span>;</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">this</span>.<span class="s4">start</span> = <span class="s2">start</span>;</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">this</span>.<span class="s4">end</span> = <span class="s2">end</span>;</p><p class="p1"><span class="Apple-tab-span">	</span>}</p><p class="p2"><br /></p><p class="p5"><span class="s3">	</span>@Override</p><p class="p1"><span class="Apple-tab-span">	</span><span class="s1">protected</span> Integer compute() {</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">int</span> <span class="s2">sum</span> = 0;</p><p class="p3"><span class="s3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></span>// 当end-start的值小于MAX时候，开始打印</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">if</span> ((<span class="s4">end</span> - <span class="s4">start</span>) &lt;= <span class="s4">MAX</span>) {</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">for</span> (<span class="s1">int</span> <span class="s2">i</span> = <span class="s4">start</span>; <span class="s2">i</span> &lt; <span class="s4">end</span>; <span class="s2">i</span>++) {</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s2">sum</span> += <span class="s4">arr</span>[<span class="s2">i</span>];</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>}</p><p class="p4"><span class="s3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></span>return<span class="s3"> </span><span class="s2">sum</span><span class="s3">;</span></p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>} <span class="s1">else</span> {</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>System.<span class="s4">err</span>.println(<span class="s5">"=====任务分解======"</span>);</p><p class="p3"><span class="s3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></span>// 将大任务分解成两个小任务</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">int</span> <span class="s2">middle</span> = (<span class="s4">start</span> + <span class="s4">end</span>) &gt;&gt;&gt;1;</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>SumTaskDemo <span class="s2">left</span> = <span class="s1">new</span> SumTaskDemo(<span class="s4">arr</span>, <span class="s4">start</span>, <span class="s2">middle</span>);</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>SumTaskDemo <span class="s2">right</span> = <span class="s1">new</span> SumTaskDemo(<span class="s4">arr</span>, <span class="s2">middle</span>, <span class="s4">end</span>);</p><p class="p3"><span class="s3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></span>// 并行执行两个小任务</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s2">left</span>.fork();</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s2">right</span>.fork();</p><p class="p3"><span class="s3"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span></span>// 把两个小任务累加的结果合并起来</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span><span class="s1">return</span> <span class="s2">left</span>.join() + <span class="s2">right</span>.join();</p><p class="p1"><span class="Apple-tab-span">	</span><span class="Apple-tab-span">	</span>}</p><p class="p1"><span class="Apple-tab-span">	</span>}</p><p style="margin: 0px; padding: 0px; font-family: Arial; line-height: 26px; background-color: #ffffff;">






































































</p><p class="p1">}<br />例子二：<br /></p><p class="p1"><span class="s1">package</span> demo.thread.fork;</p><p><br /></p> <p>import java.util.Random;</p> <p>import java.util.concurrent.ForkJoinPool;</p> <p>import java.util.concurrent.RecursiveAction;</p> <p>import java.util.concurrent.TimeUnit;</p> <p><br /></p> <p>/**</p> <p>&nbsp;* @author lin</p> <p>&nbsp;*</p> <p>&nbsp;*/</p> <p>public class ForkJoinPoolDemo2 {</p> <p>	public static void main(String[] args) throws Exception {</p> <p>		// 创建一个支持分解任务的线程池ForkJoinPool</p> <p>		ForkJoinPool pool = new ForkJoinPool(4);</p> <p>		myTask task = new myTask(60);</p> <p><br /></p> <p>		pool.submit(task);</p> <p>		pool.awaitTermination(10, TimeUnit.SECONDS);// 等待20s，观察结果</p> <p>		pool.shutdown();</p> <p>	}</p> <p><br /></p> <p>}</p> <p><br /></p> <p>/**</p> <p>&nbsp;* 定义一个可分解的的任务类，继承了RecursiveAction抽象类 必须实现它的compute方法</p> <p>&nbsp;*/</p> <p>class myTask extends RecursiveAction {</p> <p><br /></p> <p>	private static final long serialVersionUID = 1L;</p> <p>	// 定义一个分解任务的阈值&#8212;&#8212;50,即一个任务最多承担50个工作量</p> <p>	int THRESHOLD = 20;</p> <p>	// 任务量</p> <p>	int task_Num = 0;</p> <p><br /></p> <p>	myTask(int Num) {</p> <p>		this.task_Num = Num;</p> <p>	}</p> <p><br /></p> <p>	@Override</p> <p>	protected void compute() {</p> <p>		if (task_Num &lt;= THRESHOLD) {</p> <p>			System.out.println(Thread.currentThread().getName() + "承担了"</p> <p>					+ task_Num + "份工作");</p> <p>			/*try {</p> <p>				Thread.sleep(1000);</p> <p>			} catch (InterruptedException e) {</p> <p>				e.printStackTrace();</p> <p>			}*/</p> <p>		} else {</p> <p>			// 随机解成两个任务</p> <p>			Random m = new Random();</p> <p>			int x = m.nextInt(50);</p> <p>			myTask left = new myTask(x);</p> <p>			myTask right = new myTask(task_Num - x);</p> <p><br /></p> <p>			left.fork();</p> <p>			right.fork();</p> <p>		}</p> <p>	}</p> <p>}</p><p class="p1"><br /><br /><br /><br /><br /></p><img src ="http://www.blogjava.net/jlin/aggbug/432163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2016-12-21 22:37 <a href="http://www.blogjava.net/jlin/archive/2016/12/21/432163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java求实际利率之Excel函数RATE(转)</title><link>http://www.blogjava.net/jlin/archive/2015/05/26/425305.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Tue, 26 May 2015 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2015/05/26/425305.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/425305.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2015/05/26/425305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/425305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/425305.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">在excel里有个函数RATE是求实际利率的，在网上搜罗了半年，公式倒是找到不少，可以没有一个实现的算法，郁闷，自己研究，写一个出来，做个备忘</p>
<p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">&nbsp;</p>
<p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">&nbsp;</p>
<p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">公式：<br />
<img alt="" src="http://dl.iteye.com/upload/attachment/335906/b844d217-6461-3f24-9fd3-ff8a925279ec.gif" style="border: 0px;" /></p>
<p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">上面的太复杂，来个简单的：<br />
<img alt="" src="http://dl.iteye.com/upload/attachment/335908/3fc2e25c-4bb2-3083-84fd-44b36c948ac6.jpg" style="border: 0px;" /></p>
<p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.2000007629395px; background-color: #ffffff;">使用JAVA求实际利率</p>
<div id="" style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; width: 679px; margin-left: 9px; padding-right: 1px; padding-bottom: 1px; padding-left: 1px; word-break: break-all; word-wrap: break-word; line-height: 25.2000007629395px; background-color: #ffffff;">
<div>
<div style="padding-right: 3px; padding-bottom: 3px; padding-left: 3px; margin: 0px; font-weight: bold;">Java代码&nbsp;&nbsp;<a title="收藏这段代码" style="color: #e9650e; text-decoration: underline;"><img src="http://beanopen.iteye.com/images/icon_star.png" alt="收藏代码" style="border: 0px;" /></a></div>
</div>
<ol start="1" style="font-size: 1em; line-height: 1.4em; margin-left: 0px; padding-top: 2px; padding-bottom: 2px; border: 1px solid #d1d7dc; color: #2b91af;">
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="width: auto; border-width: 0px;">/**</span>&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="width: auto; border-width: 0px;">&nbsp;*&nbsp;实际利率法</span>&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="width: auto; border-width: 0px;">&nbsp;*&nbsp;@author&nbsp;Bean(mailto:mailxbs@126.com)</span>&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="width: auto; border-width: 0px;">&nbsp;*&nbsp;@param&nbsp;a&nbsp;现值</span>&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="width: auto; border-width: 0px;">&nbsp;*&nbsp;@param&nbsp;b&nbsp;年金</span>&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="width: auto; border-width: 0px;">&nbsp;*&nbsp;@param&nbsp;c&nbsp;期数</span>&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="width: auto; border-width: 0px;">&nbsp;*&nbsp;@param&nbsp;cnt&nbsp;运算次数</span>&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="width: auto; border-width: 0px;">&nbsp;*&nbsp;@param&nbsp;ina&nbsp;误差位数</span>&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="width: auto; border-width: 0px;">&nbsp;*&nbsp;@return&nbsp;利率</span>&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="width: auto; border-width: 0px;">&nbsp;*/</span>&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="color: #7f0055;">public</span>&nbsp;<span style="color: #7f0055;">static</span>&nbsp;<span style="color: #7f0055;">double</span>&nbsp;rate(<span style="color: #7f0055;">double</span>&nbsp;a,<span style="color: #7f0055;">double</span>&nbsp;b,<span style="color: #7f0055;">double</span>&nbsp;c,<span style="color: #7f0055;">int</span>&nbsp;cnt,<span style="color: #7f0055;">int</span>&nbsp;ina){&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7f0055;">double</span>&nbsp;rate&nbsp;=&nbsp;<span style="color: #c00000;">1</span>,x,jd&nbsp;=&nbsp;<span style="color: #c00000;">0.1</span>,side&nbsp;=&nbsp;<span style="color: #c00000;">0.1</span>,i&nbsp;=&nbsp;<span style="color: #c00000;">1</span>;&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7f0055;">do</span>{&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x&nbsp;=&nbsp;a/b&nbsp;-&nbsp;(Math.pow(<span style="color: #c00000;">1</span>+rate,&nbsp;c)-<span style="color: #c00000;">1</span>)/(Math.pow(rate+<span style="color: #c00000;">1</span>,&nbsp;c)*rate);&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7f0055;">if</span>(x*side&gt;<span style="color: #c00000;">0</span>){side&nbsp;=&nbsp;-side;jd&nbsp;*=<span style="color: #c00000;">10</span>;}&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rate&nbsp;+=&nbsp;side/jd;&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;}<span style="color: #7f0055;">while</span>(i++&lt;cnt&amp;&amp;Math.abs(x)&gt;=<span style="color: #c00000;">1</span>/Math.pow(<span style="color: #c00000;">10</span>,&nbsp;ina));&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7f0055;">if</span>(i&gt;cnt)<span style="color: #7f0055;">return</span>&nbsp;Double.NaN;&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7f0055;">return</span>&nbsp;rate;&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">}&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;"><span style="color: #7f0055;">public</span>&nbsp;<span style="color: #7f0055;">static</span>&nbsp;<span style="color: #7f0055;">void</span>&nbsp;main(String&nbsp;agrs[])&nbsp;{&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;现值&nbsp;=&nbsp;<span style="color: #c00000;">7944760</span>.00d;&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;年金&nbsp;=&nbsp;<span style="color: #c00000;">186627</span>.21d;&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;Double&nbsp;期数&nbsp;=&nbsp;48d;&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="width: auto; border-width: 0px;">//计算200次，比Excel20次要精确，误差精确到小数点后10位</span>&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rate(现值,年金,期数,<span style="color: #c00000;">200</span>,<span style="color: #c00000;">10</span>));&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</li>
     <li style="font-size: 1em; margin-left: 38px; padding-right: 0px; border-left-width: 1px; border-left-color: #d1d7dc; line-height: 18px; background-color: #fafafa;">} &nbsp;<br />
     </li>
</ol>
</div>
转： http://beanopen.iteye.com/blog/791878<img src ="http://www.blogjava.net/jlin/aggbug/425305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2015-05-26 11:06 <a href="http://www.blogjava.net/jlin/archive/2015/05/26/425305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java线程：概念与原理(转)</title><link>http://www.blogjava.net/jlin/archive/2015/04/26/424684.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sun, 26 Apr 2015 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2015/04/26/424684.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/424684.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2015/04/26/424684.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/424684.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/424684.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Java线程：概念与原理一、操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序，每个进程都有自己独立的一块内存空间，一个进程中可以启动多个线程。比如在Windows系统中，一个运行的exe就是一个进程。&nbsp;线程是指进程中的一个执行流程，一个进程中可以运行多个线程。比如java.exe进程中可以运行很多...&nbsp;&nbsp;<a href='http://www.blogjava.net/jlin/archive/2015/04/26/424684.html'>阅读全文</a><img src ="http://www.blogjava.net/jlin/aggbug/424684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2015-04-26 23:10 <a href="http://www.blogjava.net/jlin/archive/2015/04/26/424684.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>疫苗：Java HashMap的死循环(转)</title><link>http://www.blogjava.net/jlin/archive/2015/01/30/422594.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Fri, 30 Jan 2015 09:54:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2015/01/30/422594.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/422594.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2015/01/30/422594.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/422594.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/422594.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 疫苗：Java HashMap的死循环2013年5月10日陈皓发表评论3 人阅读 &nbsp; &nbsp;在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障，并且这个事发生了很多次，原因是在Java语言在并发情况下使用HashMap造成Race Condition，从而导致死循环。这个事情我4、5年前也经历过，本来觉得没什么好写的，因为Java的HashMap是非线程安全的，所以在并发...&nbsp;&nbsp;<a href='http://www.blogjava.net/jlin/archive/2015/01/30/422594.html'>阅读全文</a><img src ="http://www.blogjava.net/jlin/aggbug/422594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2015-01-30 17:54 <a href="http://www.blogjava.net/jlin/archive/2015/01/30/422594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>深入理解java异常处理机制(转)</title><link>http://www.blogjava.net/jlin/archive/2015/01/30/422589.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Fri, 30 Jan 2015 08:36:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2015/01/30/422589.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/422589.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2015/01/30/422589.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/422589.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/422589.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. 引子&nbsp; &nbsp; &nbsp; &nbsp;try&#8230;catch&#8230;finally恐怕是大家再熟悉不过的语句了，而且感觉用起来也是很简单，逻辑上似乎也是很容易理解。不过，我亲自体验的&#8220;教训&#8221;告诉我，这个东西可不是想象中的那么简单、听话。不信？那你看看下面的代码，&#8220;猜猜&#8221;它执行后的结果会是什么？不要往后看答案、也...&nbsp;&nbsp;<a href='http://www.blogjava.net/jlin/archive/2015/01/30/422589.html'>阅读全文</a><img src ="http://www.blogjava.net/jlin/aggbug/422589.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2015-01-30 16:36 <a href="http://www.blogjava.net/jlin/archive/2015/01/30/422589.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Myeclipse Enterprise Workbench 9.0破解方法  </title><link>http://www.blogjava.net/jlin/archive/2014/08/09/416767.html</link><dc:creator>fly</dc:creator><author>fly</author><pubDate>Sat, 09 Aug 2014 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/jlin/archive/2014/08/09/416767.html</guid><wfw:comment>http://www.blogjava.net/jlin/comments/416767.html</wfw:comment><comments>http://www.blogjava.net/jlin/archive/2014/08/09/416767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jlin/comments/commentRss/416767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jlin/services/trackbacks/416767.html</trackback:ping><description><![CDATA[1、确定关闭Myeclipse。<br />2、下载工具包。<a target="_blank" rel="nofollow" href="http://115.com/file/dn08z3oj#myeclipse9_keygen_activator.zip" style="color: #386e00; text-decoration: none;">点击下载</a>（包括<a target="_blank" rel="nofollow" href="http://115.com/file/dn08z3oj#myeclipse9_keygen_activator.zip" style="color: #386e00; text-decoration: none;">publicKey.bytes和破解工具</a>）<a href="/Files/jlin/myeclipse9_keygen_activator.zip">/Files/jlin/myeclipse9_keygen_activator.zip</a><br />3、在你安装Myeclipe的目录中Common\plugins\com.genuitec.eclipse.core_9.0.0.me201103181703.jar，<br />用压缩工具打开，WinRAR或7-zip，我用的是WinMount，再到com\genuitec\eclipse\core目录下，<br /><span style="color: #ffffff;">替换</span><a target="_blank" rel="nofollow" href="http://115.com/file/dn08z3oj#myeclipse9_keygen_activator.zip" style="color: #386e00; text-decoration: none;"><span style="color: #ffffff;">publicKey.bytes</span></a><span style="color: #ffffff;">文件， 如图</span><br /><div align="center" style="line-height: 28px; color: #575656; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53; font-size: 16px; background-color: #132600;"><img alt="Myeclipse Enterprise Workbench 9.0破解方法 - leruge - 大学生刘帆" src="http://img8.ph.126.net/MRKQjjA4kcO8WJTv8Din-Q==/63331869776928658.jpg" height="368" width="509" style="border: 0px; max-width: 100%; margin: 0pt 10px; float: none;" /><br /><div align="left"><span style="color: #ffffff;">4、修改ini配置文件。在MyEclipse 9.0\myeclipse.ini，用记事本开开Myeclipse.ini，在最后加上下面两句</span><br /><pre style="white-space: pre-wrap; padding: 2px; border: 1px solid #888888;"><p style="margin: 0px 0px 10px; padding: 0px;"><span style="color: #ffffff;">-</span><span style="color: #ffffff;">Dgenuitec</span><span style="color: #ffffff;">.</span><span style="color: #ffffff;">honorDevMode</span><span style="color: #ffffff;">=</span><span style="color: #ffffff;">true</span></p><p style="margin: 0px 0px 10px; padding: 0px;"><span style="color: #ffffff;">-</span><span style="color: #ffffff;">Dosgi</span><span style="color: #ffffff;">.</span><span style="color: #ffffff;">dev</span><span style="color: #ffffff;">=</span><span style="color: #ffffff;">true</span><br /></p></pre><br /><div align="center"><img alt="Myeclipse Enterprise Workbench 9.0破解方法 - leruge - 大学生刘帆" src="http://img9.ph.126.net/ntju-OkCCZzbDBwItuNamg==/1559934320947490299.jpg" height="461" width="558" style="border: 0px; max-width: 100%; margin: 0pt 10px; float: none;" /></div><span style="color: #ffffff;">&nbsp;5、打开Myeclipse，在&#8220;preferences&#8221;（即参数选择中）找到如图所示</span><br /><div align="center"><img alt="Myeclipse Enterprise Workbench 9.0破解方法 - leruge - 大学生刘帆" src="http://img2.ph.126.net/D7_MzBnXanjZYRJ39P44vg==/1344887438740546552.jpg" style="border: 0px; max-width: 100%; margin: 0pt 10px; float: none;" /><br /><div align="left"><span style="color: #ffffff;">6、运行</span><a target="_blank" rel="nofollow" href="http://115.com/file/dn08z3oj#myeclipse9_keygen_activator.zip" style="color: #386e00; text-decoration: none;"><span style="color: #ffffff;">破解工具</span></a><span style="color: #ffffff;">（在下载的工具包中）。如图</span><br /><div align="center"><img alt="Myeclipse Enterprise Workbench 9.0破解方法 - leruge - 大学生刘帆" src="http://img2.ph.126.net/WjLTqZv_I09UJd1Ija3BRQ==/611645124409295192.jpg" style="border: 0px; max-width: 100%; margin: 0pt 10px; float: none;" /></div>&nbsp;</div></div><span style="color: #ffffff;">&nbsp;7、随便写一个用户名（我的是leruge），点击下面两个按钮，将生成的东西写上就行了。</span><br /><div align="center"><img alt="Myeclipse Enterprise Workbench 9.0破解方法 - leruge - 大学生刘帆" src="http://img0.ph.126.net/a0tba7cObPZVpoCCTNwSQA==/638948197150225380.jpg" style="border: 0px; max-width: 100%; margin: 0pt 10px; float: none;" /></div>&nbsp;<br /><div><span style="color: #ffffff;">8、到此Myeclipse Enterprise Workbench 9.0破解完毕。</span><br /><span style="color: #ffffff;">装：http://leruge.blog.163.com/blog/static/166845995201192474724627/</span></div></div></div><img src ="http://www.blogjava.net/jlin/aggbug/416767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jlin/" target="_blank">fly</a> 2014-08-09 22:39 <a href="http://www.blogjava.net/jlin/archive/2014/08/09/416767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>