Closed MichaelHuyp closed 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大神有没有什么好的解决办法 ~~
用浮点数总会有精度问题啊。。 最后给用户看的时候,按某位精度四舍五入取整就好了。 另外,计算的时候,也可以转换为整数+指数的方式来做。
numString 为@"0.01800" 但是转换成doubleValue之后精度出现了丢失 feiLv 为0.017999999999999999
无论我尝试用NSString转化为double 或者NSDecimalNumber转化为double 都会出现这个情况 因为做的一款货币类型的app 这样计算很不准确 请问yaoyuan大神有没有什么好的解决办法 ~~