表达式之谜2找零时刻(需要精确答案的地方,避免使用float和double;货币运算使用int,long或BigDecimal)
来源:互联网 发布:校园网络自助服务系统 编辑:程序博客网 时间:2024/04/27 18:55
package expressionPuzzles;import java.math.BigDecimal;public class chargesPuzzle {/**物品一共是1.10美元,手里只有2美元,精确打印出找零值; * @param args */public static void main(String[] args) {// TODO Auto-generated method stubcharge();}private static void charge() {// TODO Auto-generated method stubSystem.out.println(2.00 - 0.10);//返回结果是1.9System.out.println(2.00 - 1.10);//返回结果是0.8999999999999999/*从结果可知,并没有得到想要的结果0.90.原因是1.1这个数字不能被精确表示为一个double,而是被表示为最接近它的double值,从而参与运算的是最接近的double值,而非1.1。一般的,并不是所有的小数都可以用二进制浮点数精确表示。浮点运算在一个范围很广的值域上提供了很好的近似,但通常不能产生精确的结果。*///改进为:一定要用BigDecimal(String)构造器,//而千万不要用BigDecimal(double)。后一个构造器将用它的参数的“精确”值来创建一个实例://new BigDecimal(.1)将返回一个表示//0.100000000000000055511151231257827021181583404541015625的BigDecimalSystem.out.println(new BigDecimal("2.00").subtract(new BigDecimal("1.10")));}}
有一个问题,为什么如果是0.1的话,结果就成功那?在下一篇中有解析。
- 表达式之谜2找零时刻(需要精确答案的地方,避免使用float和double;货币运算使用int,long或BigDecimal)
- 需要精确答案,避免使用float和double
- 精确运算避免使用float和double
- 48条:如果需要精确的答案,避免使用float和double
- 第48条:如果需要精确的答案,请避免使用float和double
- Java:Effective Java 学习笔记(第48条:如果需要精确的答案,请避免使用float和double)
- 如果要求精确的答案,请避免使用float和double
- Effective Java读书笔记--如果想要知道精确的答案,就要避免使用double和float
- 31-如果要求精确的答案,请避免使用float和double
- 第48条:如果需要精确的答案,请避免适用float和double
- 天天记录 - Java 精确计算避免使用float和double
- 做精确计算时应避免使用float和double
- Effective Java(2nd Edition) Item 48 如果需要精确结果,请避免使用float与double(译文)
- C/C++——求下面数据类型的最大值和最小值: char, short, int, long, float, double, long double和numeric_limits使用
- int,long,long,double,float的范围
- int float double BigDecimal
- int,long long,double,float等的范围(和精度)
- Java精确计算,用BigDecimal来处理int、double、float等之间的计算
- 说说Android桌面(Launcher应用)背后的故事(六)——研究Launcher而实现的附属品(可以拖拽的ListView)
- 解决Curl development headers with SSL support NOT FOUND 问题
- Title关键词匹配对于关键词排名的影响
- Linux设备模型 (3)
- mysql 临时表 创建和插入
- 表达式之谜2找零时刻(需要精确答案的地方,避免使用float和double;货币运算使用int,long或BigDecimal)
- Linux设备模型 (4)
- linux 路由表 的一些相关资料
- Windows7 64 bit 下解决:检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败
- Java API——RMIIO入门教程(2)远程流传输示例之RMIIO服务源码
- Unbalanced calls to begin/end appearance transitions for <uivewcontroller>
- mySql操作命令
- WEB中使用quartz框架来实现任务的自动处理
- jxl介绍