Java使用printf搭配%.2f格式化输出时拼接字符串报错问题
问题说明
运行Java实现的卡路里计算逻辑时存在如下现象:
- 输出内容末尾不拼接
" calories"字符串时,代码可正常编译运行,计算返回结果符合预期 - 输出内容拼接该末尾字符串时会直接触发运行错误
- 经排查,是否拼接该字符串是影响代码能否正常运行的唯一变量
复现代码
import java.util.Scanner; public class LabProgram { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int age; int weight ; int bpm; int min; double calories1; age = scnr.nextInt(); weight = scnr.nextInt(); bpm = scnr.nextInt(); min = scnr.nextInt(); calories1 = ( (age * 0.2757) + (weight * 0.03295) + (bpm * 1.0781) - 75.4991) * min / 8.368 ; System.out.printf("Calories: " + "%.2f",calories1 + " calories"); } }
错误原因
报错根源是printf方法的参数和格式符不匹配:
- 格式串
"Calories: " + "%.2f"中,%.2f是浮点型格式符,要求对应传入的参数必须是浮点数值,才能按保留两位小数的规则格式化输出 - 实际传入的第二个参数是
calories1 + " calories":Java中任意类型和字符串做+运算时,都会先转成字符串再做拼接,最终传入的参数是String类型,和%.2f要求的浮点类型不匹配,运行时就会抛出格式化类型转换异常。
修复方法
把要拼接的 calories文本直接写到格式字符串里,不要和浮点型的计算结果参数提前拼接,修正后的输出语句如下:
System.out.printf("Calories: %.2f calories", calories1);
修改后代码可正常编译运行,输出格式符合预期,不会触发运行错误。
内容的提问来源于stack exchange,提问作者HalfokayCS
相关产品推荐
相关产品推荐

