Java BigDecimal 去除小数和尾随数字

23

我是Java新手,正在尝试将BigDecimal(例如99999999.99)转换为字符串,但不包括小数点和尾随数字。另外,我不希望数字中有逗号,并且不需要进行舍入。

我尝试过:

Math.Truncate(number)

但是不支持BigDecimal。

有什么想法吗?

非常感谢。

7个回答

65
请使用这个。
BigDecimal truncated= number.setScale(0,BigDecimal.ROUND_DOWN);

这是最合适的答案,因为它不会改变数据类型。 - ScanQR
对我来说,这仍然留下了小数点和尾随数字。 - Damo

50

尝试使用number.toBigInteger().toString()


3
你改变了数据类型。 - lolo

9

没有小数的BigDecimal就是BigInteger。为什么不直接使用BigInteger呢?


5

以下是我发现的最优雅的解决方法:

public static String convertDecimalToString (BigDecimal num){
    String ret = null;
    try {
        ret = num.toBigIntegerExact().toString();
    } catch (ArithmeticException e){
        num = num.setScale(2,BigDecimal.ROUND_UP); 
        ret = num.toPlainString();
    }
    return ret;
}

num = num.setScale(2,BigDecimal.ROUND_UP); You mean : num = num.setScale(0,BigDecimal.ROUND_UP); - sbernard

0
private void showDoubleNo(double n) {
    double num = n; 
    int decimalPlace = 2; 
    BigDecimal bd = new BigDecimal(num); 
    bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP); 
    System.out.println("Point is "+bd); 
}

0
public static String convertBigDecimalToString(BigDecimal bg) {
      System.out.println("Big Decimal Value before its convertion :" + bg.setScale(2, BigDecimal.ROUND_HALF_UP));

      String bigDecStringValue = bg.setScale(0,BigDecimal.ROUND_HALF_UP).toPlainString();

      System.out.println("Big Decimal String Value after removing Decimal places is :" + bigDecStringValue);

      return bigDecStringValue;
}

请注意:我使用了'BigDecimal.ROUND_HALF_UP',只是为了确保将舍入模式设置为“最接近的邻居”,除非两个邻居距离相等。

0
这对我有用:
number.toPlainString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接