黑马程序员技术交流社区

标题: 关于double的疑惑。 [打印本页]

作者: 周胜    时间: 2011-12-12 19:01
标题: 关于double的疑惑。
本帖最后由 周胜 于 2011-12-12 19:53 编辑

double one=18100*1.12;
one为什么是20272.000000000004
应该是个整数啊。。后面怎么多个4.
作者: 胡遇潮    时间: 2011-12-12 19:20
如果对基本数据类型执行算术运算或按位运算,只要它们“比int小”(即char、byte或者short),那么在运算之前,这些值会自动转换成int。
如果你想要把结果赋值给较小的类型,就必须使用类型转换(如果要把结果赋回给较小的类型,就可能出现信息丢失)。

通常,表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。
如果将一个float值与一个double值相乘,结果就是double;
如果将一个int和一个long值相加,则结果为long
作者: 孙海亮    时间: 2011-12-12 19:27
标题: .
本帖最后由 孙海亮 于 2011-12-12 19:43 编辑

因为double是双精度浮点型,占据8个字节。有效数字最长为15位。    你把one定义成double类型,而在赋值运算符“=”右边的表达式的数据类型与其左边的变量不同时,则右边表达式的数据类型将会被自动转换成左边变量的数据类型。然后在赋值给左边的变量。

作者: 吴上储    时间: 2011-12-12 19:32
在用 double 进行运算时,经常会出现精度损失的问题,总是在一个正确值的+-0.0000001左右,
一般对double类型进行运算时,要对结果进行处理,不然对一些特殊的项目就会有影响!

作者: 余松霖    时间: 2011-12-12 19:33
1.12是小数,算出来就会以小数表示,这个值是double的一些浮点偏差
作者: 唐秀启    时间: 2011-12-12 19:34
20272.000000000004
当超出long的有效精度时,后面的数都是随机的不精确位数
作者: 周胜    时间: 2011-12-12 19:52
恩 。精度缺失问题。。了解了~多谢各位!~
作者: 王德云    时间: 2011-12-12 21:29
double只适合做科学计算,实际开发中,用BigDecimal这个类可以实现精确认计算。
作者: 颜小飞    时间: 2011-12-12 21:35
我也学习了{:soso_e100:}
作者: 黑马王金科    时间: 2012-8-16 02:09
精度问题,学习了




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