A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周胜 黑马帝   /  2011-12-12 19:01  /  2693 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周胜 于 2011-12-12 19:53 编辑

double one=18100*1.12;
one为什么是20272.000000000004
应该是个整数啊。。后面怎么多个4.

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

9 个回复

倒序浏览
如果对基本数据类型执行算术运算或按位运算,只要它们“比int小”(即char、byte或者short),那么在运算之前,这些值会自动转换成int。
如果你想要把结果赋值给较小的类型,就必须使用类型转换(如果要把结果赋回给较小的类型,就可能出现信息丢失)。

通常,表达式中出现的最大的数据类型决定了表达式最终结果的数据类型。
如果将一个float值与一个double值相乘,结果就是double;
如果将一个int和一个long值相加,则结果为long
回复 使用道具 举报

.

本帖最后由 孙海亮 于 2011-12-12 19:43 编辑

因为double是双精度浮点型,占据8个字节。有效数字最长为15位。    你把one定义成double类型,而在赋值运算符“=”右边的表达式的数据类型与其左边的变量不同时,则右边表达式的数据类型将会被自动转换成左边变量的数据类型。然后在赋值给左边的变量。
回复 使用道具 举报
在用 double 进行运算时,经常会出现精度损失的问题,总是在一个正确值的+-0.0000001左右,
一般对double类型进行运算时,要对结果进行处理,不然对一些特殊的项目就会有影响!
回复 使用道具 举报
1.12是小数,算出来就会以小数表示,这个值是double的一些浮点偏差

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
20272.000000000004
当超出long的有效精度时,后面的数都是随机的不精确位数
回复 使用道具 举报
周胜 黑马帝 2011-12-12 19:52:55
7#
恩 。精度缺失问题。。了解了~多谢各位!~
回复 使用道具 举报
double只适合做科学计算,实际开发中,用BigDecimal这个类可以实现精确认计算。
回复 使用道具 举报
颜小飞 黑马帝 2011-12-12 21:35:58
9#
我也学习了{:soso_e100:}
回复 使用道具 举报
精度问题,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马