我认为这里不存在对此的全面,基本的答案,谷歌搜索没有帮助。
任务:给定NSDecimalNumber
除以int
并返回另一个NSDecimalNumber
。
澄清:下面的amount_text
必须转换为NSDecimalNumber,因为它是一种货币。结果必须是NSDecimalNumber,但我不关心除数的格式。
到目前为止我所拥有的:
// Inputs
NSString *amount_text = @"15.3";
int n = 10;
NSDecimalNumber *total = [NSDecimalNumber decimalNumberWithString:amount_text];
// Take int, convert to string. Take string, convert to NSDecimalNumber.
NSString *int_string = [NSString stringWithFormat:@"%d", n];
NSDecimalNumber *divisor = [NSDecimalNumber decimalNumberWithString:int_string];
NSDecimalNumber *contribution = [total decimalNumberByDividingBy:divisor];
当然,这可以通过更简单的方式完成吗?
答案 0 :(得分:5)
你有没有理由使用NSDecimalNumber
?这样做可以更简单:
// Inputs
NSString *amount_text = @"15.3";
int n = 10;
float amount = [amount_text floatValue];
float result = amount / n;
如果你真的想用NSDecimalNumber
:
// Inputs
NSString *amount_text = @"15.3";
int n = 10;
NSDecimalNumber *total = [NSDecimalNumber decimalNumberWithString:amount_text];
NSDecimalNumber *divisor = [NSDecimalNumber decimalNumberWithMantissa:n exponent:0 isNegative:NO];
NSDecimalNumber *contribution = [total decimalNumberByDividingBy:divisor];
答案 1 :(得分:4)
创建NSDecimalNumber时始终可以使用初始化程序。由于它是NSNumber的子类,因此NSDecimalNumber会覆盖初始化程序。
所以你可以做到
NSDecimalNumber *decimalNumber = [[NSDecimalNumber alloc] initWithInt:10];
但是,如果您正在进行高精度计算,则应该小心,因为使用这些初始化程序时存在一些问题。您可以更详细地了解它here。
答案 2 :(得分:1)
根据您的代码......
您正在从字符串创建NSDecimalNumber
,然后使用它进行操作。
我从不这样做。除非你需要一个盒装的Objective-C对象,否则你需要NSDecimalNumber,避免使用它,使用float和double。
如果你想做得更简单,你可以这样做:
float quotient = [total floatValue]/n;
,或者
float quotient = [contribution floatValue]/n;
编辑:如果您想以任何特定原因使用盒装类型,那么您可以使用:
NSString *amount_text = @"15.3";
int n = 10;
NSDecimalNumber *total = [NSDecimalNumber decimalNumberWithString:amount_text];
NSDecimalNumber *divisor = [[NSDecimalNumber alloc] initWithInt:n];
NSDecimalNumber *contribution = [total decimalNumberByDividingBy:divisor];
答案 3 :(得分:0)
或者(可能会失去一些精确度):
double amount = 15.3;
double n = 10.0;
double contribution = amount / n;
// conversion to decimal
NSString *string = [NSString stringWithFormat:@"%f", n];
NSDecimalNumber *contribution_dec = [NSDecimalNumber decimalNumberWithString:string];
更好(如果n = 10):
[dec decimalNumberByMultiplyingByPowerOf10:-1];