Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串到BigDecimal,哪一个是好方法_Java - Fatal编程技术网

Java 字符串到BigDecimal,哪一个是好方法

Java 字符串到BigDecimal,哪一个是好方法,java,Java,我正在尝试将字符串转换为BigDecimal。请告诉我下面哪一个是好方法 BigDecimal selAmount = BigDecimal.ZERO; String amount = "1234"; selAmount = BigDecimal.valueOf(Double.parseDouble(amount)); 或 您可以将字符串直接传递给的构造函数。不要使用第一种方法。如果字符串表示的值不能用双精度精确表示,则会出现准确性问题 您也不能使用第二种方法,因为不存在接受字符串的BigDe

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

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