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
相关产品推荐
相关产品推荐

