字符串到BigDecimal,哪一个是好的approch

时间:2015-11-09 10:39:26

标签: java

我正在尝试将字符串转换为BigDecimal。请告诉下面哪一个是好approch

BigDecimal selAmount = BigDecimal.ZERO;
String amount = "1234";
selAmount = BigDecimal.valueOf(Double.parseDouble(amount));

selAmount = new BigDecimal(amount);

5 个答案:

答案 0 :(得分:1)

不要使用第一种方法。如果字符串表示无法由double准确表示的值,则会出现准确性问题。

您也不能使用第二种方法,因为BigDecimal.valueOf没有接受字符串的重载。

所以,选项3:

BigDecimal selAmount = new BigDecimal(amount);

答案 1 :(得分:0)

您可以将字符串直接传递给BigDecimal的构造函数。

答案 2 :(得分:0)

BigDecimal.valueOf(double));隐式调用return new BigDecimal(Double.toString(val));。所以,你的第二个案例会更有效率,正如Thilo所说,更多正确

代码:

 */
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));
}

答案 3 :(得分:0)

第二种方法最好继续,只需将字符串传递给BigDecimal的构造函数即可。第一种方法可能存在精确问题。

来自JavaDocs

  

public BigDecimal(String val)

     

将BigDecimal的字符串表示转换为   BigDecimal的。字符串表示由可选符号组成,   ' +' (' \ u002B')或' - ' (' \ u002D'),后跟一个零或0的序列   更多十进制数字("整数"),可选地后跟a   分数,可选地后跟一个指数。

答案 4 :(得分:0)

将字符串作为构造函数传递是更好的方法。在第一种情况下,你将失去精确度。

e.g

  

String s =“123”;
  BigDecimal bigDecimal = new BigDecimal(s);