我是靠谱客的博主 勤劳美女,最近开发中收集的这篇文章主要介绍Java小数乘整数_关于float和double丢失精度问题及解决方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

double result = 1.0 - 0.9;

System.out.println(result);//0.09999999999999998

出现这种结果的原因:float和double类型尤其不适合用于货币运算,因为要让一个float或double精确的表示0.1或者任何其他负数次方值是不可能的(十进制系统中不能准确的表示出1/3,同样二进制系统也不能准确的表示1/10)。

1.十进制整数转为二进制数:

例子:11表示成二进制数:

11/2 =5 余1

5/2 = 2 余1

2/2 = 1 余0

1/2 = 0 余1

0结束,11二进制表示为(从下往上):1011

注意:只要遇到除以后的结果为0就结束了。所有的整数除以2一定能够最终得到0,但是小数就不能,小数转变为二进制的算法就有可能会无限循环下去。

2.十进制小数转为二进制数

算法是乘以2知道没有了小数为止,例子:

0.9表示成二进制数:

0.9*2 = 1.8 取整数部分:1

0.8*2 = 1.6 取整数部分:1

0.6*2 = 1.2 取整数:1

0.2*2 = 0.4 取整数:0

0.4*2 = 0.8 取整数:0

0.8*2 = 1.6 取整数:1

。。。。

0.9二进制表示为(从上往下):1100100100100.......

注意:上面的计算过程循环了&

最后

以上就是勤劳美女为你收集整理的Java小数乘整数_关于float和double丢失精度问题及解决方案的全部内容,希望文章能够帮你解决Java小数乘整数_关于float和double丢失精度问题及解决方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部