`
- 浏览:
47807 次
- 性别:
- 来自:
衡阳
-
来源:http://www.blogjava.net/leekiang/archive/2010/07/27/327244.html
public void testBigDecimalEquals() {
assertEquals(new BigDecimal("3.50"),new BigDecimal("3.5"));//不相等
}
System.out.println(0.030*100);//输出3.0
System.out.println(0.031*100);//输出3.1
System.out.println(0.032*100);//输出3.2
System.out.println(0.033*100);//输出3.3000000000000003
System.out.println(0.034*100);//输出3.4000000000000004
System.out.println(0.035*100);//输出3.5000000000000004
System.out.println(0.036*100);//输出3.5999999999999996
System.out.println(0.037*100);//输出3.6999999999999997
System.out.println(0.038*100);//输出3.8
System.out.println(0.039*100);//输出3.9
BigDecimal b2 = new BigDecimal(0.236);
System.out.println(b2);//输出0.2359999999999999875655021241982467472553253173828125
描述:
当我们使用一些"特殊的数字"进行运算时,或者调用BigDecimal中new BigDecimal(double val)进行构造的时候,将得到意想不到的结果。
原因:
Java中,浮点类型是依据IEEE754标准的。IEEE754定义了32位和64位双精度两种浮点二进制小数标准。采用二进制表示double,float等浮点数是不准确的。
同时BigDecimal的API声明,建议使用new BigDecimal(String val)进行构造,使用new BigDecimal(double val)进行构造的时候,将得到意想不到的结果(The results of this constructor can be somewhat unpredictable)。
解决办法:
1,通过String结合BigDecimal来转换。
String val = "0.236";
//使用new BigDecimal(String val)进行构造
BigDecimal a = new BigDecimal(""+val);
BigDecimal b = new BigDecimal(""+100);
//小数的位数与构造参数的位数一致
System.out.println(a.multiply(b));//输出23.600
2,使用DecimalFormat来确定小数点后位数
double val = 0.236*100;
//保留小数点后两位,若保留三位为"#.000"
DecimalFormat df = new DecimalFormat("#.00");
String str = df.format(val);
System.out.println(Double.valueOf(str));//输出23.6
感谢
http://www.blogjava.net/kalman03/archive/2010/10/25/336121.html
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Java对浮点数的计算是不精确的,比如0.05+0.01结果不是0.06,而是0.060000000000000005,更有甚者,一个数除以0.0,Java是不会抛异常,而是得出无穷大的结果.本工具类解决了上述问题.该类提供了加减乘除四则运算的精确计算...
工控行业通讯485常用modbus协yi,通讯的数据遵循IEEE754协yi存储,为了方便使用,对modbus通讯数据进行处理。
realExample.java 演示浮点数的有效位数 remainder.java 取余运算示例 showBreak.java 利用标号语句跳转出所有循环嵌套 showCount.java 循环计数示例 showDoubleLoop.java 演示双重循环 showDoubleLoopSe.java...
主要的实现是在C中进行的,并且到Java的转换最短。 所有算法均已在同行评审的出版物中发表。 在撰写本文时,这些是已知最快的浮点到字符串转换算法。 固定的科学转换例程比sprintf的常规实现快几倍(我们将其与...
浮点数运算 布尔运算 字符和字符串 数组类型 流程控制 输入和输出 if判断 switch多重选择 while循环 do while循环 for循环 break和continue 数组操作 遍历数组 数组排序 多维数组 命令行参数 面向...
最近在做一个项目,页面上会存在一些JS浮点数的运算,发现JS浮点数运算存在一些bug.譬如: 0.1+0.2 == 0.30000000000000004 0.1 + 0.7 == 0.7999999999999999 7*0.8 == 5.6000000000000005 5.6/7 == 0....
Java运算符分类 Java运算符主要分为四类:算术运算符、关系运算符、逻辑运算符和位运算符,这些运算符...位运算符主要用于处理二进制数据,包括与、或、非、异或和移位等操作,它们可以实现对数据的快速处理和转换。
3.3.5 小心使用浮点数进行比较 53 3.3.6 boolean和char 55 3.3.7 不要使用还没有创建出来的变量 57 3.3.8 String——char串起的项链 58 3.3.9 转义符——看不见写得出 61 3.4 小结:基本数据类型—— Java中...
3.3.5 小心使用浮点数进行比较 53 3.3.6 boolean和char 55 3.3.7 不要使用还没有创建出来的变量 57 3.3.8 String——char串起的项链 58 3.3.9 转义符——看不见写得出 61 3.4 小结:基本数据类型—— Java中...
比如,switch 的 NPE 问题、浮点数的比较、无泛型限制、锁的使用方式、判断表达式、日期格式等。 3)修改描述 112 处。比如,IFNULL 的判断、集合的 toArray、日志处理等。 4)完善若干处示例。比如,命名示例、卫...
java 个人所得税计算程序 1.1. 类名:IncomeTax 1.1.1. 类描述 程序入口类,完成菜单显示、输入、回显、计算个人所得税、修改相关计算参数的总调度。 1.1.2. 类成员变量 1) private static TaxTable tt //税率表 ...
此版发布于2019年06月15日,并正式更名为《Java开发手册》,用发布者的话说:“它属于所有参与其中的贡献者,也以此聊表我们对全球Java开发者的感谢”。此版升级内容包括: 1)新增21条新规约。比如,switch的空指针...
给大家分享一篇我之前在学习java过程中的关于java基础部分的笔记,比较详细,...浮点数转成整数会直接舍弃小数点后位数。 4.字面值后缀,L D F 5.字面值前缀,0b 二进制;0x 16进制;0 8进制; \u char 类型16进制
编写一个Java源程序,其中包含: (1)编写一个类,该类可以进行加、减、乘、除四则运算,并且可以输出运算结果。此外,对于除法,如果被除数为0,该类可以报错。对于加、减、乘、除之外的运算符,该类应该告知无法...
ThreadLocalRandom也比其他任何处理高并发的方法要更快。 经验 Chris Marasti-Georg 指出: 1.Math.round(Math.random() * 10) 使分布不平衡,例如:0.0 - 0.499999将四舍五入为0,而0.5至1.499999将四舍五入为1。...
《Java开发手册》最新版涵盖了史无前例的三大升级: 1.新增21条新规约。比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、加锁与解锁的注意事项、YYYY的日期格式问题等; 2.修改描述112处。...
《Java开发手册》更新版,涵盖史无前例的三大升级: 1.新增21条新规约。比如,switch的空指针问题、浮点数的比较、无泛型限制引起的类型混乱、加锁与解锁的注意事项、YYYY的日期格式问题等; 2.修改描述112处。...
其中,BigDecimal 是一种高精度的十进制浮点数类型,适合处理大数值计算。在一些需求中,我们可能需要将 BigDecimal 值转换为 Integer 类型。这时,可以使用 BigDecimal 的 intValue() 方法进行转换。 当 ...
使用NetBeans设计界面,实现带界面冒泡排序 对输入String进行处理,将连续数字保存入数组(考虑负数,浮点数,首位为0的情况) 压缩包包含,使用java源文件生成的exe文件
字符处理辅助类:主要处理字符的各种操作; 字符追加、字符替换、字符编码转换、各种类型的转化; 将字符串形式的浮点数值转换成浮点数,如:"234.7"-->234.7