比方说,我有一个NSNumber
对象,其值为0.12345
。我想要的是一个NSNumber
对象具有相同的值,但四舍五入到指定的有效数字位数,如2,所以值如下所示:0.12
。将NSNumber循环到特定的有效数字位数
- 我不想将其转换为
NSString
和背部,而这正是一些the answers suggest - 我宁愿不投/转换和/或做乘法/除法手动like in this answer
有没有一种明显的方式来做到这一点,我失踪了?
比方说,我有一个NSNumber
对象,其值为0.12345
。我想要的是一个NSNumber
对象具有相同的值,但四舍五入到指定的有效数字位数,如2,所以值如下所示:0.12
。将NSNumber循环到特定的有效数字位数
NSString
和背部,而这正是一些the answers suggest有没有一种明显的方式来做到这一点,我失踪了?
几乎不可能做到这一点,并保持所有的约束条件。 NSNumber
没有舍入方法,所以你将不得不转换为别的东西。显而易见的路线是转换为双倍,多重,圆整和分割,但是你说你不希望这样做。所以,离开这条路线:
NSNumber *round(NSNumber *number, NSInteger places, NSRoundingMode mode) {
NSDecimal d = number.decimalValue;
NSDecimal rd;
NSDecimalRound(&rd, &d, places, mode);
return [NSDecimalNumber decimalNumberWithDecimal:rd];
}
这是我心中最接近的,谢谢 – C0D3LIC1OU5
另一个哈克的方式是:
INT yourNum = 0.12345 * 100; yourNum现在是12
浮子划分yourNumF = yourNum/100.0;
我自己不是这种方法的粉丝,但它适合您的要求。 :D
'NSNumber'没有任何内置舍入函数。你可以使用'NSDecimalNumber'。 – dan
解释你的目标多一点。为什么你需要围绕'NSNumber'? – rmaddy
“我不想......” - 解释你为什么不想用数学来解决数学问题。在你的链接问题中有很多答案,从不好到好(分数将有助于这一点)。 – CRD