关于 浮点数 精度丢失问题

错误:(一串.899999999999)~

NSString *money = @"111";
Double moneyDou = money.doubleValue;
Double moneyDouChange = @(moneyDou).doubleValue;
# 99.899999999999 ~

解决:用NSDecimalNumber + NSString ~ (不要用number double float 进行计算~)

# 转化
NSString *money = @"111";
NSDecimalNumber *decimalNumber = [NSDecimalNumber decimalNumberWithString: money];
# 加
decimalNumber = [decimalNumber decimalNumberByAdding: decimalNumber];
# 减
decimalNumber = [decimalNumber decimalNumberBySubtracting: decimalNumber];
# 乘
decimalNumber = [decimalNumber decimalNumberByMultiplyingBy: decimalNumber];
# 除
decimalNumber = [decimalNumber decimalNumberByDividingBy: decimalNumber];
# 比较
NSOrderedSame(=) NSOrderedAscending(<) NSOrderedDescending(>)
[decimalNumber compare:self: decimalNumber]
# 显示
NSLog(@"%@ 元", decimalNumber);

此文写的很简洁---iOS中NSDecimalNumber使用
此文也很简洁---iOS高精度数值计算

你可能感兴趣的:(关于 浮点数 精度丢失问题)