一尘不染

将double转换为BigDecimal并设置BigDecimal精度

java

在Java中,我想要一个双BigDecimal精度值并将其转换为a 并以一定的精度打印出它的String值。

import java.math.BigDecimal;
public class Main {
    public static void main(String[] args) {
        double d=-.00012;
        System.out.println(d+""); //This prints -1.2E-4

        double c=47.48000;
        BigDecimal b = new BigDecimal(c);
        System.out.println(b.toString()); 
        //This prints 47.47999999999999687361196265555918216705322265625 
    }
}

它打印出这个巨大的东西:

47.47999999999999687361196265555918216705322265625

并不是

47.48

我进行BigDecimal转换的原因是有时double值将包含很多小数位(即-.000012),而将double转换为String时将产生科学计数法-1.2E-4。我想以非科学计数法存储String值。

我希望BigDecimal总是这样具有两个精度单位:“ 47.48”。BigDecimal可以限制转换为字符串时的精度吗?


阅读 415

收藏
2020-09-08

共1个答案

一尘不染

如果您使用另一个MathContext,它将显示47.48000

BigDecimal b = new BigDecimal(d, MathContext.DECIMAL64);

只需选择所需的上下文即可。

2020-09-08