BigDecimal到字符串

时间:2012-12-16 09:55:51

标签: java string bigdecimal

我有一个BigDecimal对象,我想将其转换为字符串。 问题是我的值得分,我得到一个巨大的数字(长度),我只需要字符串中的原始数字,例如: 对

BigDecimal bd = new BigDecimal(10.0001)
System.out.println(bd.toString());
System.out.println(bd.toPlainString());

输出为:

10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375

我需要输出正好是字符串

中的数字10.0001

8 个答案:

答案 0 :(得分:109)

要准确获取10.0001,您需要使用String构造函数或valueOf(根据double的规范表示构造BigDecimal):

BigDecimal bd = new BigDecimal("10.0001");
System.out.println(bd.toString()); // prints 10.0001
//or alternatively
BigDecimal bd = BigDecimal.valueOf(10.0001);
System.out.println(bd.toString()); // prints 10.0001

new BigDecimal(10.0001)的问题是参数是double,并且碰巧双打不能完全代表10.0001。因此10.0001被“转换”为最接近的可能双倍,即10.000099999999999766941982670687139034271240234375,这就是BigDecimal显示的内容。

因此,使用双构造函数很少有意义。

您可以在此处详细了解Moving decimal places over in a double

答案 1 :(得分:11)

您的BigDecimal不包含号码10.0001,因为您使用double对其进行了初始化,double没有相当包含您认为的数字。 (这是BigDecimal的全部内容。)

如果您改为使用the string-based constructor

BigDecimal bd = new BigDecimal("10.0001");

...然后它实际上会包含您期望的数字。

答案 2 :(得分:6)

通过使用下面的方法,您可以将java.math.BigDecimal转换为String。

   BigDecimal bigDecimal = new BigDecimal("10.0001");
   String bigDecimalString = String.valueOf(bigDecimal.doubleValue());
   System.out.println("bigDecimal value in String: "+bigDecimalString);

输出:
字符串中的bigDecimal值: 10.0001

答案 3 :(得分:3)

为了更好地支持,不同的语言环境使用这种方式:

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(0);
df.setGroupingUsed(false);

df.format(bigDecimal);

你也可以自定义它:

DecimalFormat df = new DecimalFormat("###,###,###");
df.format(bigDecimal);

答案 4 :(得分:1)

// Convert BigDecimal number To String by using below method //

public static String RemoveTrailingZeros(BigDecimal tempDecimal)
{
    tempDecimal = tempDecimal.stripTrailingZeros();
    String tempString = tempDecimal.toPlainString();
    return tempString;
}

// Recall RemoveTrailingZeros
BigDecimal output = new BigDecimal(0);
String str = RemoveTrailingZeros(output);

答案 5 :(得分:0)

BigDecimal不能是双倍的。 你可以使用Int号码。 如果要显示自己的编号,可以使用BigDecimal的String构造函数。

像这样:

BigDecimal bd1 = new BigDecimal("10.0001");

现在,您可以将bd1显示为10.0001

这么简单。 好运。

答案 6 :(得分:0)

要使用双构造函数存档必要的结果,您需要在将BigDecimal转换为String之前对其进行舍入,例如

new java.math.BigDecimal(10.0001).round(new java.math.MathContext(6,java.math.RoundingMode.HALF_UP))。toString()

将打印“10.0001”

答案 7 :(得分:0)

  

如果您只需要设置精度数量并取整数值,那么正确的方法就是使用它自己的对象。

BigDecimal value = new BigDecimal("10.0001");
value = value.setScale(4, RoundingMode.HALF_UP);
System.out.println(value); //the return should be "10.0001"
  

面向对象编程(OOP)的支柱之一是“封装”,该支柱还说一个对象应该处理自己的操作,就像这样: