关于金钱的问题
- 最开始用floatValue计算的,但是最后计算总金额的时候,出现了问题,减到最后总金额显示”- ¥0.00”.
- 我很疑惑,都0了,为什么还有负号,在一堆代码中打印了一下总金额,发现是-0.000977.这是怎么回事?怎么还有误差.然后在网上查阅了一下资料,发现floatValu计算会有误差.
- 解决办法就是用NSDecimalNumber这个类.里面有一些方法,另外还涉及到NSNumberFormatter转化成¥11,111.00这样的格式
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterRoundDown;
NSString *money = [formatter stringFromNumber:[NSDecimalNumber decimalNumberWithString:@"99999"]];
NSLog(@"%@", money);
显示$符号是因为我用的是模拟器的原因,真机就会是¥的符号了,和手机设置的语言有关系
计算商品的金额和
+ (NSString *)moneyString:(NSString *)money addOtherMoneyString:(NSString *)string
{
NSDecimalNumber *number1 = [self decimalNumberWithString:money];
NSDecimalNumber *number2 = [self decimalNumberWithString:string];
number1 = [number1 decimalNumberByAdding:number2];
//这个方法就是上面把字符串转换成金额的方法,这样方法返回的就是一个金额了,下面都有同样的方法
return [NSDecimalNumber moneyStringWithString:[number1 stringValue]];
}
- 计算商品金额的差,额,大数要放在前面的
+ (NSString *)moneyString:(NSString *)money SubtractingOhterMoneyString:(NSString *)string
{
NSDecimalNumber *number1 = [self decimalNumberWithString:money];
NSDecimalNumber *number2 = [self decimalNumberWithString:string];
number1 = [number1 decimalNumberBySubtracting:number2];
return [NSDecimalNumber moneyStringWithString:[number1 stringValue]];
}
- 商品总和 单价x数量
+ (NSString *)moneyString:(NSString *)money multiplyingIntegerCount:(NSInteger)count
{
NSDecimalNumber *number1 = [self decimalNumberWithString:money];
NSDecimalNumber *number2 = [self decimalNumberWithString:[NSString stringWithFormat:@"%ld", (long)count]];
number1 = [number1 decimalNumberByMultiplyingBy:number2];
return [NSDecimalNumber moneyStringWithString:[number1 stringValue]];
}
- 获得商品单价 商品总和÷个数
+ (NSString *)moneyString:(NSString *)money dividingIntegerCount:(NSInteger)count
{
NSDecimalNumber *number1 = [self decimalNumberWithString:money];
NSDecimalNumber *number2 = [self decimalNumberWithString:[NSString stringWithFormat:@"%ld", (long)count]];
number1 = [number1 decimalNumberByDividingBy:number2];
return [NSDecimalNumber moneyStringWithString:[number1 stringValue]];
}
以上就是我今天总结的内容了,希望对大家有帮助.