Java 字符串到BigDecimal,哪一个是好方法
我正在尝试将字符串转换为BigDecimal。请告诉我下面哪一个是好方法Java 字符串到BigDecimal,哪一个是好方法,java,Java,我正在尝试将字符串转换为BigDecimal。请告诉我下面哪一个是好方法 BigDecimal selAmount = BigDecimal.ZERO; String amount = "1234"; selAmount = BigDecimal.valueOf(Double.parseDouble(amount)); 或 您可以将字符串直接传递给的构造函数。不要使用第一种方法。如果字符串表示的值不能用双精度精确表示,则会出现准确性问题 您也不能使用第二种方法,因为不存在接受字符串的BigDe
BigDecimal selAmount = BigDecimal.ZERO;
String amount = "1234";
selAmount = BigDecimal.valueOf(Double.parseDouble(amount));
或
您可以将字符串直接传递给的构造函数。不要使用第一种方法。如果字符串表示的值不能用
双精度
精确表示,则会出现准确性问题
您也不能使用第二种方法,因为不存在接受字符串的BigDecimal.valueOf
重载
因此,备选方案3:
BigDecimal selAmount = new BigDecimal(amount);
BigDecimal.valueOf(double))代码>调用返回新的BigDecimal(Double.toString(val))代码>隐式。所以,你的第二个案例会更有效,正如蒂洛所说,更正确
代码:
*/
public static BigDecimal valueOf(double val) {
// Reminder: a zero double returns '0.0', so we cannot fastpath
// to use the constant ZERO. This might be important enough to
// justify a factory approach, a cache, or a few private
// constants, later.
return new BigDecimal(Double.toString(val));
}
第二种方法更好,只需将字符串传递给BigDecimal的构造函数。第一种方法可能存在精度问题
来自
公共大十进制(字符串val)
将BigDecimal的字符串表示形式转换为
大十进制。字符串表示法由可选符号组成,
“+”(“\u002B”)或“-”(“\u002D”),后跟一个零或零的序列
更多的十进制数字(“整数”),可选后跟
分数,可选后跟指数
将字符串作为构造函数传递是更好的方法。在第一种情况下,您将失去精度
e、 g
字符串s=“123”
BigDecimal BigDecimal=新的BigDecimal
不仅效率更高,Double.parseDouble还会失去精度(甚至可能无法解析非常大的数字)。您确定BigDecimal.valueOf()接受字符串吗??。我在同一条线上出错了。哦,好的。然后必须是new BigDecimal
。
*/
public static BigDecimal valueOf(double val) {
// Reminder: a zero double returns '0.0', so we cannot fastpath
// to use the constant ZERO. This might be important enough to
// justify a factory approach, a cache, or a few private
// constants, later.
return new BigDecimal(Double.toString(val));
}