2013-04-05 48 views
19

我想将BigDecimal转换为字符串用于打印目的,但打印出所有数字而没有科学记数法。例如:格式BigDecimal没有完全精确的科学记数法

BigDecimal d = BigDecimal.valueOf(12334535345456700.12345634534534578901); 
String out = d.toString(); // Or perform any formatting that needs to be done 
System.out.println(out); 

我想获得12334535345456700.12345634534534578901打印。现在我得到:1.23345353454567E + 16。

+0

'的System.out.println(出);''没有的System.out.println(输出);' – 2013-04-05 13:16:10

+1

部分即使在值传递给BigDecimal构造函数之前,问题是'12334535345456700.12345634534534578901'被截断为'1.23345353454567E + 16',因为代码中的常量double值没有那么高的精度。您可以通过简单地尝试将其存储在“double”变量中并将其打印出来进行验证:http://ideone.com/j5FKp1。如果您需要额外的精度,您需要以值作为字符串开始。 – mellamokb 2013-04-05 13:17:19

回答

28

为了保持精度,你需要在传递价值为String

BigDecimal d = new BigDecimal("12334535345456700.12345634534534578901"); 
System.out.println(d.toPlainString()); 
+0

它只会打印12334535345456700 – 2013-04-05 13:17:24

+0

打印'12334535345456700.12345634534534578901'对我来说:) – Reimeus 2013-04-05 13:17:54

+0

打印出我的罚款。你有没有使用'BigInteger'? – christopher 2013-04-05 13:18:28

1

您想使用DecimalFormat

DecimalFormat df = new DecimalFormat("#.#"); 
String output = df .format(myBD); 
System.out.println(value + " " + output); 
11

BigDecimal类有一个toPlainString方法BigDecimal。调用此方法而不是标准toString,它将打印出完整的数字而不用科学记数法。

BigDecimal b = new BigDecimal("4930592405923095023950238502395.3259023950235902"); 
System.out.println(b.toPlainString()); 

Output: 4930592405923095023950238502395.3259023950235902 
1

您可以使用此

BigDecimal d = BigDecimal.valueOf(12334535345456700.12345634534534578901); 
String out= d.toPlainString(); 
System.out.println(out); 
+2

-1问题在于将原始数字的精度作为双精度传递。你至少可以做你的尽职调查,并用ideone测试它,这需要30秒的时间:http://ideone.com/n137Cs – mellamokb 2013-04-05 13:19:28

+0

你怎么接受新的BigDecimal(String value);来自Reimeus可以工作吗?我猜BigDecimal.valueOf不接受构造函数中的字符串?可以? – 2013-04-05 13:24:38

+0

对,我相信'valueOf'只用于传递数值。您将需要使用构造函数来传递字符串值。 – mellamokb 2013-04-05 13:25:49