Java 小数的计算

今天遇到一个问题:

var a = 0.3 === 0.1 + 0.2 ;

打印a输出居然为false,

在Java代码里,

boolean a = 0.3 == 0.1 + 0.2;

打印a也输出为false


查了一下Java浮点数的表示,对于0.1来说就是1/10。

十进制0.1=> 二进制0.00011001100110011…(循环0011)

十进制0.2=> 二进制0.0011001100110011…(循环0011)

= 0.01001100110011001100110011001100110011001100110011001100

转换成10进制之后得到:0.30000000000000004


所以遵守开发规范,float和double存储的时候,存在精度损失的问题。小数类型用decimal,如果存储范围超过decimal,将数据拆为整数和小数分开存储。

你可能感兴趣的:(Java 小数的计算)