如何将double类型四舍五入至最近整数?Java自定义实现问题
解决正数double四舍五入后求和的问题
你的代码存在两个核心问题,导致无法满足需求:
- 直接用
(int)强转double是截断小数部分,并非四舍五入,所以像4.5这类数会被转成4,而非期望的5; - 你对两数总和加0.5再转int,这是对总和做四舍五入,和需求里“分别四舍五入两个数后求和”的逻辑不符(比如3.5+3.5,分别四舍五入是4+4=8,而总和加0.5转int得到7,结果完全错误)。
针对正数的四舍五入,我们可以手动实现逻辑:对每个数单独执行(int)(num + 0.5),就能得到正确的四舍五入结果——正数小数部分≥0.5时,加0.5后整数位会进1,强转int即可拿到进位后的数;小数部分<0.5时,加0.5后整数位不变,强转int就是原整数部分。
修正后的代码如下:
Scanner scan = new Scanner(System.in); System.out.print("Please input two decimal numbers:"); double hit_1 = scan.nextDouble(); double hit_2 = scan.nextDouble(); // 分别对两个数执行四舍五入 int rounded1 = (int)(hit_1 + 0.5); int rounded2 = (int)(hit_2 + 0.5); int sum = rounded1 + rounded2; System.out.print("Answer: " + rounded1 + " + " + rounded2 + " = " + sum);
测试验证:
- 输入4.5和3.4,输出
Answer: 5 + 3 = 8,符合预期; - 输入2.3和5.6,输出
Answer: 2 + 6 = 8,结果正确。
内容的提问来源于stack exchange,提问作者oh my god
相关产品推荐
相关产品推荐

