ibireme / YYCategories

A set of useful categories for Foundation and UIKit.
MIT License
826 stars 218 forks source link

yaoyuan大神 转换double的时候出现精度丢失的问题 #10

Closed MichaelHuyp closed 8 years ago

MichaelHuyp commented 8 years ago
    NSDecimalNumber *a = [NSDecimalNumber decimalNumberWithString:[YPDataHandle shareHandle].stageDataModel.san];

    NSDecimalNumber *b =[NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:@"%d",100]];

    NSDecimalNumberHandler * handler = [[NSDecimalNumberHandler alloc] initWithRoundingMode:NSRoundBankers scale:6 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];

    NSDecimalNumber *result = [[a decimalNumberByDividingBy:b] decimalNumberByRoundingAccordingToBehavior:handler];

    NSString *numString = [NSString stringWithFormat:@"%.6lf",[result doubleValue]];

    feiLv = [numString doubleValue];

numString 为@"0.01800" 但是转换成doubleValue之后精度出现了丢失 feiLv 为0.017999999999999999

无论我尝试用NSString转化为double 或者NSDecimalNumber转化为double 都会出现这个情况 因为做的一款货币类型的app 这样计算很不准确 请问yaoyuan大神有没有什么好的解决办法 ~~

ibireme commented 8 years ago

用浮点数总会有精度问题啊。。 最后给用户看的时候,按某位精度四舍五入取整就好了。 另外,计算的时候,也可以转换为整数+指数的方式来做。