Android Studio开发Kotlin计算器:小数加法后无法向上取整求助
解决计算器小数加法精度问题
这是典型的浮点数精度丢失问题——Java里的float/double类型基于二进制存储,无法精确表示所有十进制小数(比如0.1在二进制中是无限循环的),多次运算后误差累积就会出现1.9999999998这类不符合预期的结果。
给你几个实用的解决思路:
用BigDecimal处理核心运算
这是最稳妥的方案,完全避免精度丢失。注意必须用字符串构造BigDecimal,别用double类型直接转:// 假设input1、input2是用户输入的字符串(比如从EditText获取) BigDecimal num1 = new BigDecimal(input1); BigDecimal num2 = new BigDecimal(input2); BigDecimal sum = num1.add(num2); // 如果需要向上取整并保留指定小数位,比如保留2位 BigDecimal roundedSum = sum.setScale(2, RoundingMode.CEILING); // 转成字符串显示到界面 displayTextView.setText(roundedSum.toString());格式化输出修正显示
如果不想改动运算逻辑,也可以在显示结果时做格式化处理,把误差值修正为预期的整数/小数:double result = 1.9999999998; // 用DecimalFormat格式化,自动修正接近整数的误差 DecimalFormat df = new DecimalFormat("#.##"); // 保留2位小数,自动适配显示 String formattedResult = df.format(result); // 会输出"2"或"2.00",取决于格式设置 // 要强制向上取整的话,先放大倍数再取整,再缩小回去 double ceilResult = Math.ceil(result * 100) / 100; // 保留2位小数向上取整输入处理注意事项
因为你已经实现了单小数点输入,后续处理用户输入时,直接把输入内容作为字符串传给BigDecimal,不要先转成double,避免提前引入精度损失。
内容的提问来源于stack exchange,提问作者Visible Happiness
相关产品推荐
相关产品推荐

