23

我有一个这样的程序,

BigDecimal bd = new BigDecimal(23.086);
BigDecimal bd1= new BigDecimal(0.000);

bd = bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
bd1 = bd1.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();

System.out.println("bd value::"+ bd);
System.out.println("bd1 value::"+ bd1);

我得到以下输出:23.09forbd和 0.00 for bd1,但我不想要bd1as 。我是否正确应用了这些方法?00.00

4

7 回答 7

20

尝试这个

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class calculator{
    public static void main(String[] args) {
        BigDecimal bd = new BigDecimal(23.086);
        BigDecimal bd1= new BigDecimal(0.000);    
        DecimalFormat df = new DecimalFormat("0.##");    
        System.out.println("bd value::"+ df.format(bd));
        System.out.println("bd1 value::"+ df.format(bd1));

    }

}
于 2013-09-10T14:38:31.360 回答
15

假设您有具有价值的 BigDecimal23000.00并且您希望它是23000. 您可以使用 method stripTrailingZeros(),但它会给你“错误”的结果:

BigDecimal bd = new BigDecimal("23000.00");
bd.stripTrailingZeros() // Result is 2.3E+4

.toPlainString()您可以通过调用并将其传递给 BigDecimal 构造函数以使其正确处理来修复它:

BigDecimal bd = new BigDecimal("23000.00");
new BigDecimal(bd.stripTrailingZeros().toPlainString()) // Result is 23000
于 2019-03-14T18:59:36.017 回答
14

简单、干净、灵活、易于理解和维护代码

适用double

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2); //Sets the maximum number of digits after the decimal point
df.setMinimumFractionDigits(0); //Sets the minimum number of digits after the decimal point
df.setGroupingUsed(false); //If false thousands separator such ad 1,000 wont work so it will display 1000

String result = df.format(bd);
System.out.println(result);
于 2013-09-10T14:40:06.540 回答
9
BigDecimal bd  = new BigDecimal(23.086); 
BigDecimal bd1 = new BigDecimal(0.000);

bd  = bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros(); 
bd1 = bd1.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();

System.out.println("bd value::"+ bd); System.out.println("bd1 value::"+ bd1);
System.out.println("new way:" + bd1.intValueExact());

//输出 bd 值::23.09

bd1 值::0.00

新方式:0

于 2013-09-10T14:43:23.900 回答
6

您可以使用printf()-- 说明%f符也适用于BigDecimals:

System.out.printf("bd1 value::%.0f%n", bd1);
bd1 值::0
于 2013-09-10T14:38:18.453 回答
4

你可以这样做

System.out.println("bd value: " + ((bd.scale() == 0) ? bd.unscaledValue() : bd));
于 2013-09-10T14:39:17.690 回答
2

下面的这种方法效果更好IMO

    bd1 = bd1.stripTrailingZeros();
    System.out.println(bd1.toPlainString());

印刷:

    0

如果 bd1 = 1.2300 ,这将打印

    1.23
于 2018-01-22T16:01:56.623 回答