<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>mac521</title>
    <description>对webservice、xml很感兴趣,希望能和大家有很好的交流.</description>
    <link>http://mac521.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>(三)长除法</title>
        <author>mac521</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mac521.javaeye.com">mac521</a>&nbsp;
                    链接：<a href="http://mac521.javaeye.com/blog/177277" style="color:red;">http://mac521.javaeye.com/blog/177277</a>&nbsp;
          发表时间: 2008年03月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          //计算一毫秒等于多少微秒<br />public void computation(){<br />	final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000;<br />	final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000;<br />	System.out.println(MICROS_PER_DAY / MILLS_PER_DAY);<br />}<br />打印值是多少?错了，输出值为5。Java中Integer最长为2147483648，24 * 60 * 60 * 1000 * 1000的结果超出了2147483648，所以MICROS_PER_DAY值为减去2147483648整数倍的余数，然后再去除MILLIS_PER_DAY。方法改为：<br />public void computation(){<br />final long MICROS_PER_DAY = 24 * 60 * 60 * 1000 * 1000l;<br />final long MILLIS_PER_DAY = 24 * 60 * 60 * 1000l;<br />System.out.println(MICROS_PER_DAY / MILLIS_PER_DAY);<br />}<br />打印出的结果为：1000。在做长整数操作的时候，尽量在值后面加上”L/l”或用它的包装类型。
          <br/><br/>
          <span style="color:red;">
            <a href="http://mac521.javaeye.com/blog/177277#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 28 Mar 2008 15:28:38 +0800</pubDate>
        <link>http://mac521.javaeye.com/blog/177277</link>
        <guid>http://mac521.javaeye.com/blog/177277</guid>
      </item>
          <item>
        <title>(二)找零钱</title>
        <author>mac521</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mac521.javaeye.com">mac521</a>&nbsp;
                    链接：<a href="http://mac521.javaeye.com/blog/177010" style="color:red;">http://mac521.javaeye.com/blog/177010</a>&nbsp;
          发表时间: 2008年03月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          曾经有过这样一个场景：一个物品价值1.1元，但是顾客只有2元零钱，这时候需要计算找给顾客剩余的零钱。<br />//找零钱<br />public String calTimeOfChange(){<br />	System.out.println(2.00 – 1.10);<br />}<br />是否会显示0.90呢?不会，而是会显示0.8999999999999999。这是什么原因呢？在组成原理课上是这样讲的：计算机计算数值时，整数与整数计算，分数与分数计算，然后将两者计算之和合并起来。同时小数在计算机中的表示，其最高位是不参与计算的。所以0.10在当作double被计算机表示时，只是一个被认为无限接近0.10的值，所以计算结果就不能像我们预期的那样了。<br />在java中有三种发式可以实现预期的效果：(运行于jdk1.5)<br />1)<br />public String calTimeOfChange(){<br />	java.text.DecimalFormat decimalFormat = new java.text.DecimalFormat(“#.##”);<br />System.out.println(decimalFormat.format(2.00 -1.00));<br />}<br />2)<br />public String calTimeOfChange(){<br />//调用BigDecimal构造函数要传入String<br />	java.math.BigDecimal i = new java.math.BigDecimal(“2.00”);<br />java.math.BigDecimal j = new java.math.BigDecimal(“2.00”);<br />System.out.println(i.subtract(j));<br />}<br />3)<br />public String calTimeOfChange(){<br />	System.out.printf(“%.2f%n”, 2.00 – 1.10);<br />}
          <br/><br/>
          <span style="color:red;">
            <a href="http://mac521.javaeye.com/blog/177010#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Mar 2008 18:13:25 +0800</pubDate>
        <link>http://mac521.javaeye.com/blog/177010</link>
        <guid>http://mac521.javaeye.com/blog/177010</guid>
      </item>
          <item>
        <title>(一)判断奇数</title>
        <author>mac521</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mac521.javaeye.com">mac521</a>&nbsp;
                    链接：<a href="http://mac521.javaeye.com/blog/176640" style="color:red;">http://mac521.javaeye.com/blog/176640</a>&nbsp;
          发表时间: 2008年03月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          //判断是否为奇数<br />public Boolean isOdd(int i){<br />	return (i % 2 == 1);<br />}<br />这个方法能正确执行么？对，它能正确执行，不过有25%的机会是错误的。因为i有可能是非正整数。例如：(a / b) * b + (a % b) == a这个等式是正确的么？答案是：在java中它不是永远正确的，因为在java运算符”%”的结果是正数还是负数是以运算符左边的数位依据的(数学中对求余是这样解释的：求余的前提条件是是自然数。时间长了，都忘记了，只好google一下-_-)，例如a。所以对上面的方法做出修改：<br />public Boolean isOdd(int i){<br />	return (i % 2 != 0);<br />}<br />或者<br />public Boolean isOdd(int i){<br />	return (i &amp; 1 != 0);<br />}<br />上面第二种方法的效率是要高于第一种的。
          <br/><br/>
          <span style="color:red;">
            <a href="http://mac521.javaeye.com/blog/176640#comments" style="color:red;">已有 <strong>2</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 27 Mar 2008 10:29:58 +0800</pubDate>
        <link>http://mac521.javaeye.com/blog/176640</link>
        <guid>http://mac521.javaeye.com/blog/176640</guid>
      </item>
      </channel>
</rss>