开发者社区 问答 正文

如何精确地将百分比值舍入小数点2位双倍?

场景:我有一个UISlider 它允许从0到100之间的值。此滑块将返回float
比如76.2345654234。在核心数据中,我希望将这个百分比以这种格式存储为双倍:0.76。

问题:使用floor()round() 在浮子上给我76个。好的。但如果我除以现在的100,就会出现令人讨厌的尾随小数。有时某些数字会起作用,给我2位小数点,但没有错误,每次,另一个数字不会,我会得到这样的结果:0.760000001。

不解我见过这个网站或其他工作100%的时间。一定有办法解决这么简单的事情吧?谢谢!

展开
收起
游客5akardh5cojhg 2019-12-04 14:18:06 401 分享
分享
版权
举报
阿里云 AI 助理回答

在处理浮点数时,确实可能会遇到精度问题,这是因为浮点数在计算机中的表示不是完全精确的。为了将UISlider返回的浮点数转换为0到1之间的双精度值,并且确保结果最多保留两位小数,你可以使用NSDecimalNumber来提高精度,或者使用格式化字符串来直接控制输出格式。这里提供两种方法:

方法1:使用NSDecimalNumber

let sliderValue = 76.2345654234
let decimalValue = NSDecimalNumber(decimal: sliderValue / 100)
let formattedValue = String(format: "%.2f", decimalValue.doubleValue)
print(formattedValue) // 输出 "0.76"

这种方法通过NSDecimalNumber处理数值,可以更精确地进行财务或需要高精度的计算。

方法2:直接格式化浮点数

如果你只是想在显示时控制小数点后的位数,而不需要进行进一步的数学运算,可以直接使用字符串格式化:

let sliderValue = 76.2345654234
let formattedValue = String(format: "%.2f", sliderValue / 100)
print(formattedValue) // 输出 "0.76"

这个方法简单直接,但请注意,这只是改变了数值的显示方式,并没有改变其内部存储结构,所以如果后续有精确计算需求,可能还需要用到第一种方法或其他高精度计算方法。

对于你提到的“0.760000001”这样的情况,使用上述任意一种方法应该都能得到期望的“0.76”。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址:
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等