java - 为什么我的 java 找零/出纳程序中的值总是向下舍入到两美分?

标签 java rounding

我尝试了很多方法,比如 math.Round 并将它们设为 double 和整数,但我不知道为什么以及在哪里最后舍入为 2 美分。当我购买 32.27 并用 36 付款时,答案是 3 美元 2 季度 2 角 2 美分。 这是我的代码:

import java.util.Scanner;

public class Change {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);


        System.out.print("Purchase: ");
        double purchase = input.nextDouble();
        System.out.print("Payment: ");
        double amountGiven = input.nextDouble();

        int remainingAmount = (int) ((amountGiven - purchase) * 100);


        int numOfDollars = remainingAmount / 100;
        remainingAmount = remainingAmount % 100;

        int numOfQuarters = remainingAmount / 25;
        remainingAmount = remainingAmount % 25;

        int numOfDimes = remainingAmount / 10;
        remainingAmount = remainingAmount % 10;

        int numOfPennies = remainingAmount;

        System.out.println("Given $ " + amountGiven + " for a purchase of $ " +
                purchase + " we need " + numOfDollars + " dollars " + numOfQuarters +
                " quarters " + numOfDimes + " dimes " +
                numOfPennies + " cents ");
    }
}

最佳答案

如果您运行此代码,您将看到问题出在哪里:

final double purchase = 32.27;
System.out.println("Purchase: " + new BigDecimal(purchase));
final double diff = 36 - purchase;
System.out.println("Difference: " + new BigDecimal(diff));
System.out.println("Cent difference: " + (int)(100*diff));

输出将是

Purchase: 32.27000000000000312638803734444081783294677734375
Difference: 3.72999999999999687361196265555918216705322265625
Cent difference: 372

因此,您可以看到问题立即开始:十进制值 32.27 由最接近的 double 值表示,该值稍大。差异略小,截断后下降了整整一分。

教训:不要将输入解析为 double,而是 into a BigDecimal .

关于java - 为什么我的 java 找零/出纳程序中的值总是向下舍入到两美分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21630855/

相关文章:

mysql - 数据库中的浮点值转换

java - 非常不寻常的舍入

bash - 四舍五入 float bash

python - 将日期时间向下舍入到前一小时

java - Android Studio 中舍入的观察结果 - java.以及一些预期的实际解释

java - 如何更改 ListView 中项目的 Activity 背景颜色?

java - 如何解决字符串索引超出范围的问题?

java - 平台命令框架与平台 UI 命令设计

java - 如何将 SMB 文件链接添加到单元格中?

java - 如何从 Eclipse Build Workspace 跳过 Maven 插件执行