我想做一些需要非常高精度的相当复杂的算术,即计算
10000000000 + 0.00000000001 = 10000000000.00000000001 10000000000.00000000001 * 3 = 30000000000.00000000003
我想将NSDecimalNumber用于此类数学,但问题是:如何使用这些值来提供它?
文档说:
- (id)initWithMantissa:(unsigned long long)mantissa exponent:(short)exponent isNegative:(BOOL)flag
我看到的第一个问题是尾数。它需要一个无符号长的长。据我了解数据类型,它是一个浮点,对吧?因此,如果是,则此时输入的值已经“脏”。它可能在其末尾的某处有不需要的小数位。我找不到苹果公司关于“unsigned long long”的好文档,但是我记得一段代码片段,其中somone用CGFloat喂尾数,所以我认为它是浮点类型。
好吧,如果它确实是一些超级浮点数据类型,那么难的问题是:如何获得一个干净,非常干净的整数到这个东西?如此干净,我可以将它乘以五万亿而不会得到错误的结果?
在实践中是否有关于NSDecimalNumber使用的好教程?
编辑:这里没问题!谢谢大家!
答案 0 :(得分:1)
如果你真的担心用不太精确的类型喂食,我建议你使用-initWithString:
,-initWithString:locale:
,+decimalNumberWithString:
或+decimalNumberWithString:locale:
。使用字符串描述可以避免在生成NSDecimalNumber之前将数值表示转换为浮点或其他数字类型。