Java 将BigDecimal转换为字符串的正确方法
为什么要使用Java 将BigDecimal转换为字符串的正确方法,java,bigdecimal,Java,Bigdecimal,为什么要使用valueOf()? 为什么我不能使用隐式转换 代码段如下所示: BigDecimal xmlvalue = new BigDecimal(12.3434379328948927894789237); String str1 = String.valueOf(xmlvalue); //Option 1 String str2 = "" + xmlvalue; //Option 2 您可以使用将BigDecimal转换为字符串您可以使用toString()方法 xmlvalue.to
valueOf()
?
为什么我不能使用隐式转换
代码段如下所示:
BigDecimal xmlvalue = new BigDecimal(12.3434379328948927894789237);
String str1 = String.valueOf(xmlvalue); //Option 1
String str2 = "" + xmlvalue; //Option 2
您可以使用将BigDecimal转换为字符串您可以使用
toString()
方法
xmlvalue.toString();
有人可能会说,使用
valueOf(x)
比使用“+x
更具可读性。在内部,两者都将退回到toString
,但它们也可以处理空值(其中null.toString()
将抛出NullPointerException
)
从理论上讲,valueOf(x)
的性能应该优于“”+x
,因为后者在内部使用StringBuilder
,这可能会导致一些开销
当您知道您的BigDecimal
为非空时(如您的示例中所示),您应该只使用toString
顺便说一下,要小心使用BigDecimal(double)
构造函数。更安全的方法是使用
new BigDecimal(“12.3434379328948927894789237”)
在您的示例中。BigDecimal(double)
不可推翻的原因在中解释,原因有两个:
String.valueOf
可以更好地表达您的意图:您显然试图获得BigDecimal值的字符串表示形式;滥用字符串连接需要更多的脑力劳动来理解您试图做什么为什么要手动使用
“”+string
转换为string?我知道很多开发人员都使用它,但在我看来,这就像是利用了Java的开发人员友好性,以及它自动完成很多事情(terminus Technical“转换”)的事实。换句话说,这是一种懒惰的方式,我不喜欢在String.valueOf()
正是为了这个目的而实现时强奸Java
技术回答:
当a+“
与整数a
一起使用时。其行为如下:
String.valueOf(a) + new String("");
这将创建两个字符串对象,而String.valueOf(a)
只使用一个。本例中的String#valueOf use方法
我认为是更好的使用方法。例如,如果要转换回此数据,最好使用此toString方法
如果
使用
BigDecimal(String)构造函数,则原始值将
恢复了
使用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);
我认为更好的方法是使用class-
java.text.DecimalFormat
,因为在实际场景中,像BigDecimal
这样的数字类表示的实际值与其字符串表示之间没有关系,尽管您还没有列出希望为完全不同类型的数据提供字符串值的原因
在我看来,字符串表示完全是关于格式的&这个DecimalFormat
类可以让您更好地控制它,例如,我需要将一些BigDecimal
值写入文本文件,不同的值需要采用不同的格式
Java文档的一部分
DecimalFormat是NumberFormat的一个具体子类,用于格式化
十进制数。它有各种各样的功能设计来实现它
可以在任何语言环境中解析和格式化数字,包括支持
用于西文、阿拉伯文和印度文数字。它还支持不同的应用程序
数的种类,包括整数(123)、定点数
(123.4%)、科学记数法(1.23E4)、百分比(12%)和货币
数额(123美元)。所有这些都可以本地化
选项2有什么问题?为什么不能使用它?为什么不使用String str=xmlvalue.toString()?检查下面的链接您在技术上是正确的,但是您必须假设创建两个对象实际上是一个问题。事实并非如此,Java是一个对象创建和清理性能野兽。最好让它处理引擎盖下发生的优化,并主要关注可读代码。编辑:这可能意味着你的建议仍然有效,但原因不同!