Java 浮点数精度控制 |
您所在的位置:网站首页 › 设置double的精度 › Java 浮点数精度控制 |
1、String.format(String format,Object… args) Java中用String.format()来控制输出精度, format参数用来设置精度格式, args参数代表待格式化的数字。 返回值是格式化后的字符串。 Java API文档中的解释是这样的: 这种方法,在处理单个数据比较方便,如果要对大量数字进行格式化控制,这种方法就显得有些冗余。 下面这个方法比较适合批量处理数据,即:一次设定格式,一直使用该格式。 2、DecimalFormat类,用以定制小数格式 先上代码,如果不懂‘#’和‘0’代表什么意思,直接略过代码,去看后面的内容。了解之后再返回来看代码。 public class test { public static void main(String args[]) { // System.out.println(String.format("%.2f", Math.PI)); double pi = 3.142; //仅取整数部分 System.out.println(new DecimalFormat("0").format(pi));//3 System.out.println(new DecimalFormat("#").format(pi));//3 //取小数点后两位 System.out.println(new DecimalFormat("0.00").format(pi));//3.14 //取小数点后两位,整数部分取两位,不足前面补零 System.out.println(new DecimalFormat("00.00").format(pi));//03.14 //取小数点后4位,不足补零 System.out.println(new DecimalFormat("0.0000").format(pi));//3.1420 //以百分比方式计数并小数点后2位 System.out.println(new DecimalFormat("0.00%").format(pi));//314.20% long l = 123456789; //科学计数法,取5位小数 System.out.println(new DecimalFormat("0.00000E0").format(l));//1.23457E8 //显示为两位整数,并保留小数点后四位的科学计数法 System.out.println(new DecimalFormat("00.0000E0").format(l));//12.3457E7 //每三位以逗号分隔 System.out.println(new DecimalFormat(",000").format(l));//123,456,789 //嵌入格式文本 System.out.println(new DecimalFormat("这个长整数为:0").format(l));//这个长整数为:123456789 } }看了这么半天“#”和“0”,那么这两个有什么区别呢?先别急,等我慢慢解释。 先放两张截图自己揣摩一下(看不懂继续往后翻): 接下来着重解释一下“0”和“#”。这是精度控制的核心所在。 0:0总是显示出来,如果不足以0补足,如果多余则精确度为0的个数。例如: pi = 3.142 System.out.println(new DecimalFormat("0.00").format(pi)); //结果 3.14小数点后两个0,代表精确到小数点后两位 例如: pi = 3.142 System.out.println(new DecimalFormat("0.0000").format(pi)); //结果 3.1420原本要精确到小数点后四位,但是小数点后不足四位,所以用0代替 一般情况下的精确度控制仅用0表示足够了。 那么“#”代表什么意思呢? #:总是省略引导0“#”和“0”都可以控制精度,但是当“#”所在的位置为0时,就会忽略掉这个0。忽略掉的这个0不影响结果的大小。 举个例子 public static final DecimalFormat df1 = new DecimalFormat( "#.##" ); public static final DecimalFormat df2 = new DecimalFormat( "#.00" ); System.out.println(df1.format(7.80));//8后面的0被忽略 System.out.println(df1.format(85));//不会在后面补0 System.out.println(df1.format(85.786));//正常显示精度,因为后面没有出现0 System.out.println(df1.format(85.796));//根据四舍五入,后面的0被忽略 System.out.println(df2.format(7.80)); System.out.println(df2.format(85)); System.out.println(df2.format(85.786)); //结果 7.8 85 85.79 85.8 7.80 85.00 85.79也就是说,使用#号来控制精度,可能起不到控制精度的效果。 因此建议,始终用0来控制精度。 参考: http://tutorials.jenkov.com/java-internationalization/decimalformat.html https://blog.csdn.net/thunder4393/article/details/1739911 https://www.cnblogs.com/hq233/p/6539107.html https://stackoverflow.com/questions/16583604/formatting-numbers-using-decimalformat |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |