• double转int时精度不一致问题


    float和double类型的主要设计目的是为了科学计算和工程计算。它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。float和double类型对于货币计算尤为不合适,因为要让一个float或者double精确地表示0.1(或者10的任何负数次方值)是不可能的,比如System.out.println(2.0-1.1)将会打印0.899999999999999,而不是你所希望的0.9,这种舍入错误产生的原因是浮点数实际上是用二进制系统实现的,而分数1/10在二进制系统中没有精确的表示,其道理就如同在十进制系统中无法精确表示1/3一样;再比如0.5在二进制系统中有精确表示,而0.55在二进制系统中没有精确表示。

     

    如果定义 int a=(2.0-1.1)*100 

    则 a=89

    所以为了避免这个问题,另加上小数 如 a=(2.0-1.1)*100 +0.01

    这样就可以使结果正确

    统一有问题的数据:

    int a = (123.3/100)*1000;

    int a=(481.0/100)*100 + 0.01;
    int a=(401.5/100)*1000;

    等。。。。

  • 相关阅读:
    Linux三剑客之sed
    xcodebuild
    mac xcworkspace xcodebuild
    [转]Jenkins Xcode打包ipa
    ios批量打包
    ios打包
    ios 打包
    ios 尺寸
    Launch Screen在iOS7/8中的实现
    如何查看ipa包支持哪些cpu指令集
  • 原文地址:https://www.cnblogs.com/gongpixin/p/4477353.html
Copyright © 2020-2023  润新知