• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iOS:限制数据类型 "double"的精度而不转换为 NSString

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:31:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

在这里,我想问一下 double 如何使用它们的精度。

我创建了一个示例,其中我输入了如下双值:

double d = 2.0126161;
double d1 = 2.0126162;
double d2 = 2.0126163;
double d3 = 2.0126164;
double d4 = 2.0126165;

电流输出:

如果我通过在 lldb 中运行“po”命令设置断点并检查,则值显示如下:

(lldb) po d
2.0126160999999998

(lldb) po d1
2.0126162000000001

(lldb) po d2
2.0126162999999999

(lldb) po d3
2.0126164000000002

(lldb) po d4
2.0126165

我将这些 double 值分配给具有数据类型“ double ”的 CLLocation 对象的纬度和经度。

在这里,您可以看到输出,显示 d4 的“po”命令打印值“2.0126165”,这与我们明确提供给 d4 的值相同,这完全没问题,也是我想要的。

问题:

但是与我们显式传递的值相比,d、d1、d2、d3 的“po”命令的值发生了变化。

d, d1, d2, d3 值的这种变化会在涉及双倍 d, d1, d2, d3 的计算中产生差异。如果我们检查累积效应表明与我们预期的输出相比存在显着差异。

我不想将值四舍五入到特定的小数位数,因为值因值而异。

如何让 d、d1、d2、d3 具有与显式初始化时相同的值,而不使用数据类型 double 更改精度(检查下面的预期输出)?

预期输出:

(lldb) po d
2.0126161

(lldb) po d1
2.0126162

(lldb) po d2
2.0126163

(lldb) po d3
2.0126164

(lldb) po d4
2.0126165

注意:请注意,我不想在屏幕上显示这个值,我使用这些 double 值进行数学计算,所以没有必要通过传递“转换为 NSString” %.7f"作为 NSString 的格式说明符。



Best Answer-推荐答案


你所经历的是正常的,有无限数量的数字必须映射到一定数量的字节。因此,您通常不会得到您输入的确切数字,而是可以以所选数字格式表示的下一个最接近的数字。

对于数学计算,请使用 NSDecimalNumber .

关于iOS:限制数据类型 "double"的精度而不转换为 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29764054/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap