You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

英镑与便士金额计算中MOD运算符的使用及代码简化咨询

英镑与便士金额计算中MOD运算符的使用及代码简化咨询

嘿,我完全懂你的困扰!你现在用整数计算总便士数再拆分英镑和便士的思路其实非常稳妥(毕竟用整数处理货币能避免浮点数精度坑),但确实可以让代码更简洁,同时输出更规范的十进制格式。咱们来一步步拆解优化:

首先回应你的核心疑问:其实int转double是完全可行的,而且咱们甚至不需要手动拆分英镑和便士,用格式化工具就能一键搞定规范的货币输出,还能解决你现在遇到的“不是真小数”、位数不足的问题(比如5便士不会只显示.5,而是.05)。

你的代码可以简化的几个点:

  • 输出规范的货币格式:你现在用拼接字符串的方式输出,会出现位数不统一的问题。用printf格式化一行就能解决:

    System.out.printf("\nTotal change is £%.2f", count / 100.0);
    

    这里count / 100.0会自动把int类型的总便士数转成double,%.2f强制保留两位小数,完美输出标准的英镑金额格式。

  • 简化累加逻辑:你可以把累加操作直接写到输入循环里,不用单独再写一个循环,减少代码行数的同时更直观:

    for (int i = 0; i < coinTxt.length; i++) {
        System.out.print(coinTxt[i] + "\t");
        totalPennies += key.nextInt() * pennies[i];
    }
    
  • 更专业的货币格式化(可选):如果想要更贴合真实货币场景的输出(比如自动适配英镑的格式规则),可以用NumberFormat类,代码可读性和专业性更强:

    NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.UK);
    System.out.println("\nTotal change is " + currencyFormat.format(totalPennies / 100.0));
    

    这样输出会是£x.xx的标准格式,整数英镑也会显示£x.00,非常规范。

简化后的完整代码示例

import java.util.Scanner;
import java.text.NumberFormat;
import java.util.Locale;

public class Question4 {
    public static void main(String[] args) {
        Scanner key = new Scanner(System.in);
        int totalPennies = 0;
        int[] pennies = {200, 100, 50, 20, 10, 5, 2, 1};
        String[] coinTxt = {"£2 =", "£1 =", "50p =", "20p =", "10p =", "5p =", "2p =", "1p ="};

        System.out.println("Enter your coins\n");
        for (int i = 0; i < coinTxt.length; i++) {
            System.out.print(coinTxt[i] + "\t");
            totalPennies += key.nextInt() * pennies[i];
        }

        // 方法1:简洁的printf格式化
        System.out.printf("\nTotal change is £%.2f", totalPennies / 100.0);

        // 方法2:专业的货币格式化(取消注释即可使用)
        // NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.UK);
        // System.out.println("\nTotal change is " + currencyFormat.format(totalPennies / 100.0));
    }
}

最后总结

你的原代码思路是完全正确的,而且已经比较简洁了。优化后既解决了“不是真正小数”的显示问题,还让代码更紧凑易读。另外,坚持用整数处理货币是非常好的习惯,能避开浮点数的精度误差,所以不用纠结转double的问题,通过格式化就能得到你想要的十进制显示效果。

备注:内容来源于stack exchange,提问作者Chip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:34:28