为什么我应该使用valueOf()
?
为什么我不能使用隐式转换?
代码段如下所示:
BigDecimal xmlvalue = new BigDecimal(12.3434379328948927894789237);
String str1 = String.valueOf(xmlvalue); //Option 1
String str2 = "" + xmlvalue; //Option 2
答案 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)
有两个原因:
String.valueOf
更能传达您的意图:您显然会尝试获取BigDecimal值的String表示形式;滥用字符串连接需要更多的心理努力才能理解你想要做什么答案 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);