基于NetBeans的Java简易预算程序开发问题咨询
解决Java简易预算程序的运算与格式化问题
现有代码的问题修正
先修正你现有代码里的语法和格式错误:
- 行
int multiplication = number1 * number2末尾缺少分号,会触发编译错误 printf的格式符写错了,应该是%d\n而非*d*n,且你要输出的是酒店总价(number1*number2),不是两个单独输入值
实现里程乘法与金额格式化
你尝试用int存储里程乘以0.78的结果是错误的——int仅能存储整数,小数运算会丢失精度,必须用double类型处理带小数的金额。
步骤1:计算里程费用
直接用double类型存储里程计算结果:
double mileageCost = number3 * 0.78;
这里number3是int类型,和0.78(double类型)相乘时会自动转为double,保留小数精度。
步骤2:金额格式化
Java的格式化逻辑和HTML完全不同,要用printf的格式符%.2f强制保留两位小数(符合金额显示要求),示例:
System.out.printf("酒店总价: $%.2f\n", (double)number1 * number2); System.out.printf("里程费用: $%.2f\n", mileageCost);
如果想先存储酒店总价,也可以直接用double类型:
double hotelTotal = number1 * (double)number2;
实现总预算的加法运算
直接把酒店总价和里程费用相加即可,不需要if-else语句——只有条件判断场景才需要if-else,这里只是简单算术运算:
double totalBudget = hotelTotal + mileageCost; System.out.printf("本次旅行总预算: $%.2f\n", totalBudget);
完整修正后的代码
import java.util.Scanner; public class TravelBudget { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter the number of days you will be traveling: "); int number1 = input.nextInt(); System.out.print("Enter the cost of your hotel per day: "); int number2 = input.nextInt(); System.out.print("Enter the number of miles you will travel over the entire trip: "); int number3 = input.nextInt(); // 计算酒店总价,用double存储避免后续加法精度问题 double hotelTotal = number1 * (double)number2; // 计算里程费用 double mileageCost = number3 * 0.78; // 计算总预算 double totalBudget = hotelTotal + mileageCost; // 格式化输出,保留两位小数 System.out.printf("酒店总价: $%.2f\n", hotelTotal); System.out.printf("里程费用: $%.2f\n", mileageCost); System.out.printf("本次旅行总预算: $%.2f\n", totalBudget); input.close(); } }
关键说明
- 选择
double的原因:处理带小数的金额必须用浮点类型,int会截断小数部分导致计算错误 %.2f的作用:强制格式化输出为两位小数,自动四舍五入,符合金额的显示规范- 无需
if-else:你的需求是固定算术运算,没有需要判断的分支条件,完全不需要用到if-else
内容的提问来源于stack exchange,提问作者HHH
相关产品推荐
相关产品推荐

