我有一个BigDecimal对象,我想将其转换为字符串。 问题是我的值得分,我得到一个巨大的数字(长度),我只需要字符串中的原始数字,例如: 对
BigDecimal bd = new BigDecimal(10.0001)
System.out.println(bd.toString());
System.out.println(bd.toPlainString());
输出为:
10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375
我需要输出正好是字符串
中的数字10.0001
答案 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)的支柱之一是“封装”,该支柱还说一个对象应该处理自己的操作,就像这样: