如何让double类型变量精确存储为带两位小数的形式(如1001.00)?
关于double类型存储带两位小数数值的问题
double类型本身无法保留小数点后两位零的格式:double是基于二进制的浮点数,它存储的是数值的近似值,
1001.0和1001.00在数值上完全等价,编译器会将它们视为同一个值,内存中存储的内容没有区别。你写的double amount = 1001.00;本质上和double amount = 1001.0;是一样的。如果需要精确控制小数位数用于计算(比如金额类场景),放弃使用double,改用
BigDecimal类型,它能精确维护小数位数:// 直接通过字符串初始化保证精度 BigDecimal amount = new BigDecimal("1001.00"); // 或者对整数设置两位小数精度 BigDecimal amount = BigDecimal.valueOf(1001).setScale(2, RoundingMode.UNNECESSARY);如果只是后续展示时需要显示为两位小数,可以继续用double存储数值,在输出阶段做格式化处理:
double amount = 1001.0; DecimalFormat df = new DecimalFormat("#.00"); System.out.println(df.format(amount)); // 输出结果为1001.00
内容的提问来源于stack exchange,提问作者Laplas
相关产品推荐
相关产品推荐

