关于Java小数点位数保留的解决方案

xq1752 7年前
   <h2><strong>第一种方法-使用DecimalFormat类</strong></h2>    <p>举个例子,假如我们需要保留两位小数,我们可以这样写</p>    <pre>  <code class="language-java">DecimalFormat df = new DecimalFormat("0.00");</code></pre>    <p>测试如下:</p>    <pre>  <code class="language-java">double d = 0.200;  DecimalFormat df = new DecimalFormat("0.00");  System.out.println(df.format(d));</code></pre>    <p>输出结果为:</p>    <p>0.20</p>    <p>若double d=0.000;输出结果为0.00;</p>    <p>若double d=0;输出结果为0.00;</p>    <p>若double d=41.2345;输出结果为41.23;</p>    <p>经测试,不管double d的值为多少,最后结果都是正常的两位小数。</p>    <p>同理若是保留一位小数 DecimalFormat df = new DecimalFormat("0.0"); 其他以此类推</p>    <p><strong>若是这种写法DecimalFormat df = new DecimalFormat("0.00"),不管传入的任何值,均保留两位小数</strong></p>    <p>还有一种写法是这样:</p>    <pre>  <code class="language-java">double d = 41.123;  DecimalFormat df = new DecimalFormat("#.##");  System.out.println(df.format(d));</code></pre>    <p>输出结果为:</p>    <p>41.12</p>    <p>若double d=2.00,输出结果为2;</p>    <p>若double d=41.001,输出结果为41;</p>    <p>若double d=41.010,输出结果为41.01;</p>    <p>若double d=0,输出结果为0;</p>    <p>若double d=0.200,输出结果为0.2;</p>    <p>总结:若是这种写法DecimalFormat df = new DecimalFormat("#.##"),则保留小数点后面不为0的两位小数,这种写法不能保证保留2为小数,但能保证最后一位数不为0;</p>    <h2><strong>第二中方法</strong></h2>    <p>测试:</p>    <pre>  <code class="language-java">double d = 0.6544;  String s=String.format("%.2f",d);  System.out.println(s);</code></pre>    <p>输出结果为:</p>    <p>0.65</p>    <p>若double d=0.6566,输出结果为0.66;</p>    <p>若double d=0,输出结果为0.00;</p>    <p>其中String s=String.format("%.2f",d)表示小数点后任意两位小数,其中2为表示两位小数,若需要三位小数,把2改为3即可,其他同理。</p>    <p>总结:这种方法不管传入的值是多少,均保留两位小数,并且符合四舍五入的规则。</p>    <h2><strong>第三种方法-使用BigDecimal类</strong></h2>    <p>测试:</p>    <pre>  <code class="language-java">double d = 1.000;  BigDecimal bd=new BigDecimal(d);  double d1=bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();  System.out.println(d1);</code></pre>    <p>输入结果:1.0</p>    <p>若double d=0,输出结果为0.0;</p>    <p>若double d=1.999,输出结果为2.0;</p>    <p>若double d=1.89,输出结果为1.89;</p>    <p>总结:使用这种写法若小数点后均为零,则保留一位小数,并且有四舍五入的规则。</p>    <h2><strong>源码</strong></h2>    <p>以下为Java测试类</p>    <pre>  <code class="language-java">import java.math.BigDecimal;  import java.text.DecimalFormat;    public class Test {      public static void main(String[] args) {          double d = 1.19;          System.out.println(formatDecimal4(d));      }        public static String formatDecimal1(double d) {          DecimalFormat df = new DecimalFormat("0.00");          return df.format(d);      }        public static String formatDecimal2(double d) {          DecimalFormat df = new DecimalFormat("#.##");          return df.format(d);      }      public static String formatDecimal3(double d){          return String.format("%.2f",d);      }        public static double formatDecimal4(double d){          BigDecimal bd=new BigDecimal(d);          double d1=bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();          return d1;      }    }</code></pre>    <p> </p>    <p>来自:http://www.jianshu.com/p/00fff555986b</p>    <p> </p>