@
Gct012 Bigdecimal (1) / Bigdecimal (3) * Bigdecimal (6) ,1 / 3 * 6 ,1.0 / 3 * 6 ,这在计算逻辑上就是三码事,你就不该把他们混为一谈。这是计算基础的问题,跟 Java 都没关系。
Bigdecimal (1) / Bigdecimal (3) * Bigdecimal (6),这是精确的十进制数字计算(现实世界的计算规则),在除法结果面对无限小数的时候,必定要做舍入。你的除法里面选择的规则是「精度 12 ,四舍五入」,因此 1/3 的结果是 0.333333333333 ,而最后结果就精确的为 1.999999999998 。
1 / 3 * 6 是整型计算,在除法结果面对小数的时候,要丢弃。故 1/3 的结果是 0 ,最终结果是 0
1.0 / 3 * 6 因为 1.0 的原因,被调整成了浮点计算,浮点数和浮点计算,是计算机专用的计算逻辑,与现实世界的计算规则有所不同,经常出现一些莫名其妙的错误,比如 0.33333333333333333 * 6 = 2 。
计算机默认的计算规则就是浮点计算,十进制计算是需要特殊处理的。Windows 计算器里面,科学计算器是高规格的精确结算,标准计算器是快速计算,这俩是不一样的。如果你想要结果都是 0.33333333333333333 * 6 = 2 ,那就别用 BigDecimal ,用 Double 或者 基本类型 double 。但是请不要这么干,原因去找初中的数学教科书。