Java的数值精度的输出控制(包含BigDecimal)
2009-03-29 22:51
405 查看
import java.io.*; import java.text.*; import java.math.*; //import java.util.*; public class gaojingdutest { public static void main(String[] args){ //double 型数据的小数点控制输出 double a=1113.141592653; DecimalFormat formatter1=new DecimalFormat("#.000000"); System.out.println(formatter1.format(a)); //BigDecimal型数据的小数点控制输出 String b="1113.141592653"; //方法1 BigDecimal bd1=new BigDecimal(b); DecimalFormat formatter2=new DecimalFormat("#.000000"); System.out.println(formatter2.format(bd1.doubleValue())); //方法2, BigDecimal中的setScale方法的第一个参数就 //是我们要指定的精度位数,这里我设为6位小数,但记住,如果 //舍入后的结果后面几位小数是0,则会被省略,就是说0没被输出,详见后面的测试 BigDecimal bd2=new BigDecimal(b); System.out.println(bd2.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); //测试 System.out.println(); System.out.println("以下为测试:"); BigDecimal b0=new BigDecimal("1.00000000"); System.out.println(b0.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b1=new BigDecimal("1.00000010"); System.out.println(b1.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b2=new BigDecimal("1.00000020"); System.out.println(b2.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b3=new BigDecimal("1.00000030"); System.out.println(b3.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b4=new BigDecimal("1.00000040"); System.out.println(b4.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b5=new BigDecimal("1.00000050"); System.out.println(b5.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b6=new BigDecimal("1.00000060"); System.out.println(b6.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b7=new BigDecimal("1.00000070"); System.out.println(b7.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b8=new BigDecimal("1.00000080"); System.out.println(b8.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); BigDecimal b9=new BigDecimal("1.00000090"); System.out.println(b9.setScale(6,BigDecimal.ROUND_HALF_UP).doubleValue()); /*输出结果如下: 1113.141593 1113.141593 1113.141593 以下为测试: 1.0 1.0 1.0 1.0 1.0 1.000001 1.000001 1.000001 1.000001 1.000001 */ } }
-->高精度的问题确实是一个大问题,又可惜今年了.
PS:写完之后才发现Java还有这样的方法来控制输出精度
System.out.printf("%.6f/n",0.1);
输出结果为:0.100000
相关文章推荐
- Fzu 2036 Log Calculator(JAVA 浮点数输出精度控制)
- C和Java中如何控制浮点数的精度输出
- java输出精度控制
- 【java基础】BigDecimal 精度控制
- Java控制输出精度
- fzu 2036 2036 Log Calculator JAVA 浮点数输出精度控制
- java从命令行输入一个数,输出其包含数值相邻相加的和等于输入的数字
- C++数值精度的输出控制
- cout 控制数值的输出精度
- Java Console 输出格式控制
- 【Java】解决计算浮点数精度问题(BigDecimal)
- 灵活控制 Hibernate 的日志或 SQL 输出(包含参数),以便于诊断
- Java复习笔记(2)——输入、输出和控制流程
- java封装FFmpeg命令,支持原生ffmpeg全部命令,实现FFmpeg多进程处理与多线程输出控制(开启、关闭、查询),rtsp/rtmp推流、拉流
- 小数点输出精度控制问题 .xml
- Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入
- POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)
- 今天开始学Java 将相同索引的数值进行求和运算,输出按照key值升序进行输出。
- Java浮点数float,bigdecimal和double精确计算的精度误差问题总结
- Java工具类之——BigDecimal运算封装(包含金额的计算方式)