公司新来一个同事,把 BigDecimal 运用的炉火纯青!|字符串|param|...
双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String)和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类...
你以为用了 BigDecimal 后,计算结果就一定精确了?
因为我们知道,double表示的小数是不精确的,如0.1这个数字,double只能表示它的近似值。所以,当我们使用newBigDecimal(0.1)创建一个BigDecimal的时候,其实创建出来的值并不是正好等于0.1的。而是0.1000000000000000055511151231257827021181583404541015625。这是因为doule自身表示的只是一个近似值。所以,如果我们...
老板,用float存储金额为什么要扣我工资
有效部分为规约形式的小数部分,取小数的前23位即10100110011001100110011。最后拼接到一起即01000000110100110011001100110011。到这里已经大致可以知道float为什么不精确了,首先在存储的时候就会造成精度损失了,在这里小数部分的二进制是循环的,但是仍然只能取前23位。double造成精度损失的原因也是如此那用什么类型存储金额?
注意了,这些数值计算的坑千万别踩!
//小数点后1位,向下舍入BigDecimalnum2=num1.setScale(1,BigDecimal.ROUND_DOWN);System.out.println(num2);//小数点后1位,四舍五入BigDecimalnum3=num1.setScale(1,BigDecimal.ROUND_HALF_UP);System.out.println(num3);输入结果:3.33.4这次得到的结果与我们预期一致。BigDecimal...
Java中的浮点数分析
float占4个字节,double占8个字节,为了方便起见,这里就只讨论float类型.float其实和一个int型的大小是一样的,一共32位,第一位表示符号,2-9表示指数,后面23位表示小数部分.这里不多说,请参考:httpblog.csdn/treeroot/archive/2004/09/05/95071.aspx...