美文网首页
iOS-double的精度问题

iOS-double的精度问题

作者: 康小曹 | 来源:发表于2022-08-19 09:54 被阅读0次

引子

总结:

  1. double 精度问题的本质是二进制位无法存储完整的小数,会导致循环。

当 double 或者 float 作为容器时,就必定会出现精度丢失的问题,无论是 iOS、Java 都会出现:

精度丢失

但是不同系统底层处理不同,可能会导致现象不同,比如 Java 中 double 在计算之后才可能出问题,未计算之前,基本不会出问题,这里大概就是底层做了处理:


java

比如 780.06 在 iOS 中赋值时就出问题了。

  1. double 精度问题会导致数值略微扩大或者缩小,但是对于一般的场景够用。

因为 double 转化成字符串时会自动进行四舍五入。而这个四舍五入如果不进行控制(%.xf),就是 6 位,所以并不会存在什么问题。一般场景下, 6 位精度绝对够用,不够用的情况下,把 %.xf 中的 x 设置到 10 以内都问题不大。而 float 也因为精度不准确,可能在三四位就出问题了,所以 double 比 float 更为理想;

  1. 如果 double 参与计算又涉及到四舍五入,则需要特别注意。

因为数值略少的情况下,780.01 会变成 780.00999999xx 。如果这个时候,增加了 0.005,就变成了 780.01499999xx ,而此时如果刚好对 3 位精度进行四舍五入,第三位小数刚好是 4 ,最终就会变成 780.01,而实际应该是 780.01 + 0.005 = 780.015,四舍五入应该是 780.02。所以就出现了较大偏差。

即:double 类型在计算之后进行四舍五入时,需要特别注意!!!

  1. 大小判断时一定要保证单位一样,即 double 和 double 比较,float 和 float 比较。

当精度出现丢失,但是只要源数据是一样的,精度丢失之后的数值也是一样的,所以只需要保证单位一致即可,也就是说,错也要错的一样:

例子:

单位不一样时判断失效:


单位不一致

单位一致,即使精度丢失,结果也正确:


单位一致

相关文章

  • iOS-double的精度问题

    引子略 总结: double 精度问题的本质是二进制位无法存储完整的小数,会导致循环。 当 double 或者 f...

  • JavaScript 浮点运算精度问题

    JavaScript 浮点运算精度问题 JavaScript浮点运算存在精度问题,本文阐述问题的产生原因以及解决方...

  • JS 数据精度以及数字格式化

    在做一些电商、财务业务的时候常常会遇见JS的数据精度问题以及数字格式化问题 数据精度问题包括两个方面: 大整数精度...

  • js精度问题

    关于js浮点数计算精度不准确问题的解决办法 今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一...

  • double精度问题

    浮点数存储的是近似值而不是确切的值;所以double的值存在不确定情况在mysql中:使用DECIMAL,在jav...

  • BigDecimal 精度问题

    遇到关于精度的一个奇怪的问题 出乎意料,这个输出的是 result:14.059999999999999 网上查了...

  • 高精度问题

    Description(高精度的一类问题) Problems involving the computation ...

  • 精度丢失问题

    0.1 + 0.2 !== 0.30000000000000004产生的主要原因是 js通过64位的二进制数据存储...

  • go精度问题

    一个 float32 类型的浮点数可以提供大约 6 个十进制数的精度,而 float64 则可以提供约 15 个十...

  • javascript 精度问题

    javascript的精度问题比如 0.1+0.2 //0.30000000000000004在有计算的js中很...

网友评论

      本文标题:iOS-double的精度问题

      本文链接:https://www.haomeiwen.com/subject/feiegrtx.html