float a = 0.01;
int b =99999999; double c = 0.0; c = a * b;//如果单纯的使用double会导致数据不是特别的精准、但是对于做金融的来说、又要求精度比较高、所以可以使用字符串的形式来解决这个问题
NSLog(@"%f",c); NSLog(@"%.2f",c); c = a*(double)b; NSLog(@"%f",c); NSLog(@"%.2f",c); NSString *objA = [NSString stringWithFormat:@"%.2f",a]; NSString *objB = [NSString stringWithFormat:@"%.2f",(double)b]; c = [objA doubleValue]* [objB doubleValue]; //使用字符串可以解决这个问题、 NSLog(@"%.2f",c);
同样、使用系统的NSDecialNumber也是可以实现的、如果数据比较多、最好使用系统的框架、
NSDecimalNumber *num1 = [NSDecimalNumber decimalNumberWithString:objB]; NSLog(@"%@",num1); NSDecimalNumber *num2 = [NSDecimalNumber decimalNumberWithString:objA]; NSLog(@"%@",num2); c = [num1 doubleValue] * [num2 doubleValue]; NSLog(@"%.2f",c);
2015-11-09 11:24:33.660 NSDecimal[1583:75337] 1000000.000000
2015-11-09 11:24:33.661 NSDecimal[1583:75337] 1000000.002015-11-09 11:24:33.661 NSDecimal[1583:75337] 999999.9676482015-11-09 11:24:33.661 NSDecimal[1583:75337] 999999.972015-11-09 11:24:33.662 NSDecimal[1583:75337] 999999.992015-11-09 11:24:33.662 NSDecimal[1583:75337] 999999992015-11-09 11:24:33.662 NSDecimal[1583:75337] 0.012015-11-09 11:24:33.662 NSDecimal[1583:75337] 999999.99