1) 8.459669791666667.multiply(4800).doubleValue()
b1.multiply(b2)
(java.math.BigDecimal) 40606.4149999999968000
b1.multiply(b2).doubleValue()
(double) 40606.41499999999 2) 8.459669791666667*4800=40606.415 用BigDecimal的multiply(第一种方法)算出的结果40606.4149999999968000 。保留两位是40606.41
用普通的(*)乘法(第二种方法)来计算就是40606.415。保留两位是40606.42,这样结果就相差0.01。
但我觉得跟这个没关系,默认会四舍五入的。
应该是doubleValue的问题。怎么BigDecimal会丢失精度呢?求解
b1.multiply(b2)
(java.math.BigDecimal) 40606.4149999999968000
b1.multiply(b2).doubleValue()
(double) 40606.41499999999 2) 8.459669791666667*4800=40606.415 用BigDecimal的multiply(第一种方法)算出的结果40606.4149999999968000 。保留两位是40606.41
用普通的(*)乘法(第二种方法)来计算就是40606.415。保留两位是40606.42,这样结果就相差0.01。
但我觉得跟这个没关系,默认会四舍五入的。
应该是doubleValue的问题。怎么BigDecimal会丢失精度呢?求解
解决方案 »
- 一个关于socket接收post数据的问题
- 字符串比较问题
- java 记事本
- ObjectInputStream中的readObject中的问题
- 大家读《Thinking in java》都是哪个版本的呀,谁翻译的最好啊??
- 大侠救我 JAVA整数除法的向上取整的语句怎么写?救我!
- 简单问题:jbuilder7中的jTextArea怎么设置scrollbar属性
- scjp的分数怎么算的 ?61%是什么意思?不是有60道题么?怎么叫答对61%?
- 那里可以下载Visualage for java 3.02
- 关于replaceFirst的问题
- 请各位大虾帮忙解决一个难题
- UDP编程: 发送一个UDP包后,然后进入接收状态,但有时收不到回应包
public double doubleValue()
Converts this BigDecimal to a double. This conversion is similar to the narrowing primitive conversion from double to float as defined in the Java Language Specification: if this BigDecimal has too great a magnitude represent as a double, it will be converted to Double.NEGATIVE_INFINITY or Double.POSITIVE_INFINITY as appropriate. Note that even when the return value is finite, this conversion can lose information about the precision of the BigDecimal value. Specified by:
doubleValue in class Number
Returns:
this BigDecimal converted to a double.