zoukankan      html  css  js  c++  java
  • iOS

    开发中处理处理价格金额问题, 后台经常返回float类型, 打印或转成NSString都会有精度丢失问题, 因此使用系统自带的NSDecimalNumber做处理, 能解决这问题:
    经过测试其实系统NSDecimalNumber是对有问题值做了四舍五入处理


        •    还有经过测试, 重要的事说三遍:
处理精度有关的数据请用double
处理精度有关的数据请用double
处理精度有关的数据请用double
        float testDouble = [jsonDict[@"Body"][@"Amount"] floatValue]; //有问题 90.989999999999994
        NSString *convertString = decimalNumberWithString([jsonDict[@"Body"][@"Amount"] stringValue]);
        NSLog(@"%@", convertString);
           testDouble的值     原始值& NSDecimalNumber处理后打印后的值
    //    99.489999999999994 99.49
    //    99.989999999999994 99.99
    //    90                 90.00
    //    90.090000000000003 90.09
    //    90.189999999999998 90.19
    //    90.290000000000006 90.29
    //    90.39              90.39
    //    90.489999999999994 90.49
    //    90.590000000000003 90.59
    //    90.689999999999998 90.69
    //    90.790000000000006 90.79
    //    90.89              90.89
    //    90.989999999999994 90.99


    对此自己写了个方法处理 :
    /** 直接传入精度丢失有问题的Double类型*/
    NSString *decimalNumberWithDouble(double conversionValue){
        NSString *doubleString        = [NSString stringWithFormat:@"%lf", conversionValue];
        NSDecimalNumber *decNumber    = [NSDecimalNumber decimalNumberWithString:doubleString];
        return [decNumber stringValue];
    }
    强烈建议 :
       有关浮点型数据,后台传字符串的格式,防止丢失精度。

  • 相关阅读:
    json2jsoncpp 高级应用篇
    重载delete(operator delete)
    发布一个 json转c++ 的一个转换小程序(依赖jsoncpp 0.60)
    json2jsoncpp 关键代码分析2
    json2jsoncpp 基础应用篇
    linux下编译android版本的ffmpeg库
    win7系统下无线网卡共享本地网卡给移动设备上网
    使用事件冒泡原理控制菜单或浮层
    多条件Sql语句
    测试 数据库是否链接成功
  • 原文地址:https://www.cnblogs.com/yujidewu/p/6103913.html
Copyright © 2011-2022 走看看