Java Android-双精度到大十进制的转换问题

Java Android-双精度到大十进制的转换问题,java,android,Java,Android,我正在尝试将用户的输入从编辑文本转换为大十进制。然而,我在做这件事时遇到了问题。我的结果没有转换。例如,计算完成后,数字将为12.345678。调用方法round()后,舍入值仍然相同。我做错什么了吗?我在和钱打交道 .爪哇 double totalPrice = Double.parseDouble(price.getText().toString()); int position = spinner.getSelectedItemPositi

我正在尝试将用户的输入从
编辑文本
转换为
大十进制
。然而,我在做这件事时遇到了问题。我的结果没有转换。例如,计算完成后,数字将为12.345678。调用方法
round()
后,舍入值仍然相同。我做错什么了吗?我在和钱打交道

.爪哇

            double totalPrice = Double.parseDouble(price.getText().toString());

            int position = spinner.getSelectedItemPosition();
            name = name1.getText().toString();

            if(position == 0)
            {
                totalPrice = totalPrice * 1.07;
                System.out.println(totalPrice);
            }
            else
            {
                totalPrice = (totalPrice * 1.1)*1.07;
                System.out.println(totalPrice);
            }

            round(totalPrice, 2, BigDecimal.ROUND_HALF_UP);

            }

}

public static double round(double unrounded, int precision, int roundingMode)
{
    BigDecimal bd = new BigDecimal(unrounded);
    BigDecimal rounded = bd.setScale(precision, roundingMode);
    return rounded.doubleValue();
}
您没有使用
round
的结果。你至少应该做到:

totalPrice = round(totalPrice, 2, BigDecimal.ROUND_HALF_UP);
但是,您不应该首先使用
double
作为货币值。始终使用
BigDecimal
——否则,由于二进制浮点的工作方式,您可能会得到意外的结果。

您没有使用
舍入的结果。你至少应该做到:

totalPrice = round(totalPrice, 2, BigDecimal.ROUND_HALF_UP);

但是,您不应该首先使用
double
作为货币值。始终使用
BigDecimal
-否则您可能会发现由于二进制浮点的工作方式,您会得到意外的结果。

具体来说,避免使用
Double.parseDouble
,并使用get-go.Jon中的
新的BigDecimal(String)
-谢谢,现在它可以工作了。我想,
totalPrice
会自动用新值初始化。路易斯-谢谢你的信息。已将其更改为使用BigDecimal而不是double。虽然使用BigDecimal要比使用Double声明新的BigDecimal被乘数稍微麻烦一些。但至少它可以避免像Jon指出的那样的问题。特别是,避免使用
Double.parseDouble
,并使用get-go.Jon中的
新的BigDecimal(String)
-谢谢,现在它可以工作了。我想,
totalPrice
会自动用新值初始化。路易斯-谢谢你的信息。已将其更改为使用BigDecimal而不是double。虽然使用BigDecimal要比使用Double声明新的BigDecimal被乘数稍微麻烦一些。但至少它可以避免像乔恩指出的那样的问题。