gpt4 book ai didi

java - 字符串到整数转换给出错误的输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:55:05 32 4
gpt4 key购买 nike

在我的程序中,我将付款金额值发布到 Controller ,并将该值转换为整数。因为我需要在调用 Web 服务之前将此值转换为美分。我正在使用 java 并将字符串转换为下面给出的整数代码

(int)(Double.parseDouble(httpRequest.getParameter(PAYMENT_AMOUNT).trim()) * 100);

支付.jsp

页面是这样的

Payment Amount: <input type="text" id="paymentAmount" name="paymentAmount" value="1.00" />

对于许多输入值,它会给出正确的输出。

但对于某些值,如 8.03 作为输入,它返回 802 作为输出值。这发生在 9.03、9.04、10.03、10.04、11.03 等......这个问题的原因可能是什么?

最佳答案

您需要对结果进行四舍五入。您遇到的问题是 float 几乎但不完全是它作为字符串打印时出现的数字。当您执行计算时,这会显示为一个问题。

我建议你试试

(int) Math.round( Double.parseDouble( httpRequest.getParameter(PAYMENT_AMOUNT).trim()) * 100);

在您的特定情况下,您可以使用 BigDecimal 查看 double 的实际表示是什么

double d = 8.03;
BigDecimal bd = new BigDecimal(d);
System.out.println("bd: " + bd);
double d100 = d * 100;
System.out.println("d100: " + d100);
int i100 = (int) d100;
System.out.println("i100: " + i100);
int r100 = (int) Math.round(d100);
System.out.println("r100: " + r100);

打印

bd: 8.0299999999999993605115378159098327159881591796875
d100: 802.9999999999999
i100: 802
r100: 803

因此您可以看到 8.03 的实际值略小于 8.03 这意味着当您 * 100 并舍入 down 这意味着您得到的是 802 而不是预期的 803

最好的解决方案是对找到最接近的可表示值的结果进行舍入。

关于java - 字符串到整数转换给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35212966/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com