将BigDecimal转换为String的正确方法

时间:2013-12-20 09:55:17

标签: java bigdecimal

为什么我应该使用valueOf()? 为什么我不能使用隐式转换?

代码段如下所示:

BigDecimal xmlvalue = new BigDecimal(12.3434379328948927894789237);
String str1 = String.valueOf(xmlvalue); //Option 1
String str2 = "" + xmlvalue; //Option 2

8 个答案:

答案 0 :(得分:3)

您可以使用BigDecimal#toString将BigDecimal转换为字符串

答案 1 :(得分:2)

您可以使用toString()方法

xmlvalue.toString();

答案 2 :(得分:1)

为什么要手动使用"" + string转换为String?我知道有很多开发人员使用它,但对我来说,这似乎就像利用Java的开发人员友好性以及它自动完成很多东西(终端技术“转换”)这样的事实。换句话说,这是一种懒惰的方式,当String.valueOf()完全为此目的实现时,我不喜欢强奸Java。

技术答案:

a + ""与整数a一起使用时。它表现得如此:

String.valueOf(a) + new String("");

这会创建两个String对象,而String.valueOf(a)只使用一个。

答案 3 :(得分:1)

我认为更好的方法是使用类-java.text.DecimalFormat,因为在实际情况下,由BigDecimal这样的数字类表示的实际值与它们的String表示形式之间没有关系。列出了您想要完全不同类型的数据的String值的原因。

在我看来,字符串表示形式完全是关于格式的,而这个DecimalFormat类可让您更好地控制该字符串我需要将几个BigDecimal值写入文本文件,并且不同的值必须采用不同的格式。

Java文档的一部分,

  

DecimalFormat是NumberFormat的一个具体子类,它格式化   十进制数。它具有旨在使其成为一体的多种功能   可以在任何语言环境中解析和格式化数字,包括支持   用于西方,阿拉伯和印度数字。它还支持不同的   各种数字,包括整数(123),定点数字   (123.4),科学计数法(1.23E4),百分比(12%)和货币   金额($ 123)。所有这些都可以本地化。

答案 4 :(得分:0)

有人可能会说使用valueOf(x)"" + x更具可读性。在内部,两者都会回退到toString,但它们也可以处理空值(null.toString()会抛出NullPointerException)。

理论上,valueOf(x)的效果应优于"" + x,因为后者在内部使用StringBuilder,这会导致一些开销。

如果您知道BigDecimal非空(如示例所示),则应使用toString

顺便说一句,请注意BigDecimal(double)构造函数。更安全的方法是使用 您的示例中为new BigDecimal("12.3434379328948927894789237")BigDecimal(double)中解释了{{1}}不可预测的原因。

答案 5 :(得分:0)

有两个原因:

  1. 使用String.valueOf更能传达您的意图:您显然会尝试获取BigDecimal值的String表示形式;滥用字符串连接需要更多的心理努力才能理解你想要做什么
  2. 它可能更快:使用连接将在内部创建一个StringBuilder,它连接两个字符串,然后调用toString()到自身(虽然编译器可能足够聪明,以摆脱这些不必要的操作)

答案 6 :(得分:0)

String#value在这种情况下使用Double#toString方法。

我认为最好使用BigDecimal#toString方法。例如,如果要转换回这些数据,最好使用这个toString方法。

  

如果那样   字符串表示使用。转换回BigDecimal   BigDecimal(String)构造函数,然后是原始值   回收

答案 7 :(得分:0)

使用BigDecimal不会带来double中丢失的精度。如果您需要超过15位数的精度,则需要使用String和BigDecimal。

BigDecimal xmlvalue = new BigDecimal("12.3434379328948927894789237");
String str1 = xmlvalue.toString(); // Simplest Option 

如果你有double,你也可以这样做

// creating BigDecimal here doesn't help unless you do rounding.
String str1 = String.valueOf(d);