BigDecimal.valueOf(laneVolumeTemp) .divide(BigDecimal.valueOf(totalVolume)).setScale(3, RoundingMode.HALF_UP).doubleValue()出现报错non-terminating decimal expans;no exact reprentable decimal result,如何修改
时间: 2023-12-14 16:39:10 浏览: 32
这个错误通常是因为小数位数过多导致的,可以尝试修改精度或者舍入模式来解决问题。
例如,您可以将setScale()方法的精度参数增加一些,例如改为4或5,这样可以保留更多的小数位数。另外,您也可以尝试使用RoundingMode.DOWN舍入模式,这样可以避免不可精确表示的小数出现。
在您的代码中,您可以尝试这样修改:
```
BigDecimal result = BigDecimal.valueOf(laneVolumeTemp)
.divide(BigDecimal.valueOf(totalVolume), 5, RoundingMode.DOWN);
double value = result.doubleValue();
```
这样,setScale()的精度参数改为5,同时使用RoundingMode.DOWN舍入模式,可以确保结果是一个可精确表示的小数。
相关问题
.divide(BigDecimal.valueOf(10000), 2, RoundingMode.HALF_UP))
你的代码片段使用的是 Java 中的 `BigDecimal` 类来进行除法计算,并指定了除数为 `10000`,保留小数点后 2 位,并采用四舍五入的舍入模式。
下面是一个示例代码,展示了如何使用 `BigDecimal` 进行除法计算:
```java
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal dividend = new BigDecimal("123456789");
BigDecimal divisor = new BigDecimal("10000");
BigDecimal result = dividend.divide(divisor, 2, RoundingMode.HALF_UP);
System.out.println(result);
}
}
```
在上面的示例中,我们将被除数设置为 `123456789`,除数设置为 `10000`,然后使用 `divide` 方法进行除法计算。最后,我们将结果保留两位小数并采用四舍五入的舍入模式。
在运行上述代码后,输出将是 `12345.68`。这是将 `123456789` 除以 `10000` 并保留两位小数后的结果。
bigDecimal.setScale(4, RoundingMode.HALF_UP)
`bigDecimal.setScale(4, RoundingMode.HALF_UP)`是使用Java的BigDecimal类来设置小数点后四位并进行四舍五入的操作。
以下是一个示例代码:
```java
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Main {
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal("10.123456789");
BigDecimal roundedNumber = bigDecimal.setScale(4, RoundingMode.HALF_UP);
System.out.println(roundedNumber); // 输出结果:10.1235
}
}
```
在这个示例中,我们创建了一个BigDecimal对象`bigDecimal`,并将其设置为"10.123456789"。然后,我们使用`setScale(4, RoundingMode.HALF_UP)`方法将小数点后的位数设置为4,并使用四舍五入模式进行舍入。最后,我们打印出结果`roundedNumber`,它的值为"10.1235"。