二进制无法精确表示1/10

最近翻了下JAVA的基础书,发现一个原来忽略的知识点,现在记录一下:

System.out.println(2-1.1)会是多少?

0.9?

是0.8999999999999999

然而为什么呢?以下是搜索到的比较满意的回答,顺便备注下:

其实跟数位表示法有关,比如十进制的情况下:

123,相当于1*10^2+2*10^1+3*10^0(值*进制^位置,个位0,十位1,百位2)

同理:1/10由二进制表示小数的时候只能够表示能够用1/(2^n)

例如:

0.5能够表示,因为它可以表示成为1/2

0.75也能够表示,因为它可以表示成为1/2+1/(2^2)

0.875也能够表示,因为它可以表示成为1/2+1/(2^2)+1/(2^3)

但是0.1不能够精确表示,因为它补能够表示成为1/(2^n)的和的形式

最近翻了下JAVA的基础书,发现一个原来忽略的知识点,现在记录一下: System.out.println(2-1.1)会是多少? 0.9? 是0.8999999999999999 然而为什么呢?以下是搜索到的比较满意的回答,顺便备注下: 其实跟数位表示法有关,比如十进制的情况下: 123,相当于1*10^2+2*10^1+3*10^0(值*进制^位置,个位0,十位1,百位2) 同理:1/10由二进制表示小数的时候只能够表示能够用1/(2^n) 例如: 0.5能够表示,因为它可以表示成为1/2 0.75也能够表示,因为它可以表示成为1/2+1/(2^2) 0.875也能够表示,因为它可以表示成为1/2+1/(2^2)+1/(2^3) 但是0.1不能够精确表示,因为它补能够表示成为1/(2^n)的和的形式
经验分享 程序员 微信小程序 职场和发展