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

SwiftUI开发简易计算器时结果无小数位、除法结果为0问题求助

问题原因

你遇到的计算结果异常是NSExpression的默认运算规则导致的:当表达式中的运算数均为整数(如4/3、5/6这类没有小数点的数字参与运算)时,NSExpression会自动执行整数除法,直接丢弃小数部分,所以才会出现5/6结果为0、4/3结果为1的问题,后续转CGFloat的操作无法挽回已经丢失的小数精度。

修复方案

只需要在构造表达式前,将所有整数格式的运算数统一转换为浮点数格式,强制走浮点数除法规则即可,修改calculateResults方法如下:

func calculateResults() -> String
{
    if(validInput())
    {
        var workings = visibleWorkings.replacingOccurrences(of: "%", with: "*0.01")
        workings = workings.replacingOccurrences(of: "X", with: "*")
        // 新增正则替换:把所有整数补为浮点数,避免整数除法
        workings = workings.replacingOccurrences(of: "(\\d+)(?!\\.\\d*)", with: "$1.0", options: .regularExpression)
        let expression = NSExpression(format: workings)
        let result = expression.expressionValue(with: nil, context: nil) as! CGFloat
        return formatResult(val: result)
    }
    showAlert = true
    return ""
}
效果验证

修改后输入4/3会返回1.33,输入5/6会返回0.83,符合预期。你原有formatResult、validInput的逻辑无需改动即可正常工作。

内容的提问来源于stack exchange,提问作者jcwilson11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:06:07