今天遇到一个问题:
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,将数据拆为整数和小数分开存储。
网友评论