在 Swift 中,有没有办法将浮点数截断为小数点后两位,以便您可以用它执行进一步的计算?我见过的所有线程都涉及到字符串的转换,我不知道如何在数学上使用它。
我尝试使用扩展(在这个论坛上找到),认为我可以在截断后转换回浮动,但我最终回到了开始的地方,使用另一个未截断的浮动。我需要我的返回值以四分之一为单位(即 6.50、6.75、5.25 等),而我最终得到的结果是 6.990022...
必须有一个简单的方法来做到这一点,但我遇到了困难。提前致谢...
问题是这样的:
func roundToNearestQuarter(#power : Float) -> String {
var errorToLowerQuarterRaw : Float = power % 0.25 // 0.210000038146973
var errorToLowerQuarterString = errorToLowerQuarterStepRaw.string(2) // "0.21"
var errorToLowerQuarter = NSString(string: errorToLowerQuaterStepString).floatValue // 0.209999993443489
// more code
}
roundToNearestQuater(6.71)
You cannot一轮Float
or Double
精确至小数点后 2 位exactly。
原因是这些数据类型使用二进制浮点表示,
并且不能准确地表示0.1或0.01这样的数字。
参见示例
- 为什么浮点数不准确? https://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate
- 每个计算机科学家都应该了解的浮点运算知识 http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
但你说:
我需要我的返回值以四分之一为单位(即 6.50、6.75、5.25 等),
and that is exactly possible because 0.25 = 2-2 can be represented exactly as a floating point number.
The round()
函数将浮点数舍入为最接近的整数值。
要四舍五入到最近的四分之一,您只需使用因子 4“缩放”计算即可:
func roundToNearestQuarter(num : Float) -> Float {
return round(num * 4.0)/4.0
}
roundToNearestQuarter(6.71) // 6.75
roundToNearestQuarter(6.6) // 6.5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)