java对于浮点运算的bug
来源:互联网 发布:zabbix windows模板 编辑:程序博客网 时间:2024/05/22 04:41
java对于浮点运算的bug
许可:
/**
* 最近接到客服反映后台经常有一些退款总是退不干净,
* 比如550.1元的交易,小二退款时输入了550.10最终
* 却只退掉550.09
* 通过排查这个问题发现一个java中处理浮点运算的bug
* 这个bug,编程思想中也提到过.
* 问题说明和解决办法如下,也希望不知道的同学谨记
* 心,知道的同学请无视.
* */
/**
* java的基本类型数学运算普遍存在精度问题
* 比如我们想做一个简单的乘法运算 2.1*100
* 期望得到的是210
* 直接使用数字进行运算得到的是正确的
* 但是如果用float进行运算得到的就不是我们所预期的.
* 具体参看下面实例
* */
System.out.println( 2.1 * 100 );//210.0
float f = 2.1f;
int i = 100;
System.out.println( f * i );//209.99998
System.out.println( f * 100 );//209.99998
/**
* 解决办法使用BigDecimal
* BigDecimal类使它的用户对舍入行为有完全的控制权,
* 迫使用户显式地指定能够舍弃部分精度的舍入操作的舍入行为。
* 具体参看下面实例
* */
BigDecimal money = new BigDecimal("2.1");
BigDecimal oneHundred = new BigDecimal("100");
System.out.println(money.multiply(oneHundred)); //210.0
/**
* 结论,在java中对浮点进行一些运算的时候尽量使用BigDecimal来处理.
* */
回答一:有本教科书写道:货币计算切勿用小数,一般都用最小金钱分为单位了;
回答二:一般是换算成分,封装一个money类来做处理.用那个BigDecimal性能貌似不太好.
- java对于浮点运算的bug
- linux kernel对于浮点运算的支持
- linux kernel对于浮点运算的支持
- linux kernel对于浮点运算的支持
- JS 浮点运算的bug解决办法
- JS浮点数运算Bug的解决办法
- JS浮点数运算Bug的解决办法
- js浮点运算bug的解决办法
- js浮点运算bug的解决办法
- PHP浮点运算中一个不算BUG的BUG
- java浮点运算的陷阱
- 对于不支持浮点型的10log10运算实现
- JS浮点书的运算的BUG的处理办法
- JS浮点数运算Bug
- 解决js浮点运算bug
- JS浮点数运算Bug的解决办法(转)
- 解决JS浮点数运算出现Bug的方法
- 解决JS浮点数运算出现Bug的方法
- word2007 -----无法打开Office OpenXML 文件《文件名》, 因为内容有错误。
- Javascript控制文本框只能输入数字
- C#如何生成随机不重复的数字
- 30个Oracle语句优化规则详解
- XMLHttpRequest.responseXML.documentElement=null的问题
- java对于浮点运算的bug
- 一位软件工程师的6年总结
- document对象的属性和方法
- 2005开始的项目列表
- Hadoop(转自http://caibinbupt.javaeye.com/blog/262412)
- 下拉框平铺
- 消息通信测试程序
- 上一个报表开发的value-request问题
- 一个 Oracle 存储过程编写的入门级例子