You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:50:53