英镑与便士金额计算中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
相关产品推荐
相关产品推荐

