黑马程序员技术交流社区

标题: 这个程序为为什么不是打印0.1 [打印本页]

作者: 尤圣回    时间: 2012-9-16 17:33
标题: 这个程序为为什么不是打印0.1
System.out.println(2.0-1.9);
作者: 皮卫凯    时间: 2012-9-16 17:37
本帖最后由 皮卫凯 于 2012-9-16 17:39 编辑

那打印的是什么??都不知道这两个是啥类型的。代码写完整啊。
作者: 程金    时间: 2012-9-16 17:40
float和double类型的主要设计目标是为了科学计算和工程计算。它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。float和double类型对于货币计算尤为不合适,因为要让一个float或者double精确地表达0.1(或者10的任何其他负数次方值)是不可能的。
要想得到精确结果,用BigDecimal,int或者long进行计算。二进制无法精确表示浮点小数的小数部分,所以只能取近似值,而bigdecimal是一个java类,不单是一个简单类型,用它的方法可以做到更精确的计算

作者: 彭旭文    时间: 2012-9-17 02:06
我觉得Java的默认数据类型不能直接显示太精确的数值,如果要显示太精确的数值,可能要用上方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2