2017-08-15 53 views
2

比方说,我有一个NSNumber对象,其值为0.12345。我想要的是一个NSNumber对象具有相同的值,但四舍五入到指定的有效数字位数,如2,所以值如下所示:0.12将NSNumber循环到特定的有效数字位数

有没有一种明显的方式来做到这一点,我失踪了?

+1

'NSNumber'没有任何内置舍入函数。你可以使用'NSDecimalNumber'。 – dan

+3

解释你的目标多一点。为什么你需要围绕'NSNumber'? – rmaddy

+2

“我不想......” - 解释你为什么不想用数学来解决数学问题。在你的链接问题中有很多答案,从不好到好(分数将有助于这一点)。 – CRD

回答

2

几乎不可能做到这一点,并保持所有的约束条件。 NSNumber没有舍入方法,所以你将不得不转换为别的东西。显而易见的路线是转换为双倍,多重,圆整和分割,但是你说你不希望这样做。所以,离开这条路线:

NSNumber *round(NSNumber *number, NSInteger places, NSRoundingMode mode) { 
    NSDecimal d = number.decimalValue; 
    NSDecimal rd; 
    NSDecimalRound(&rd, &d, places, mode); 
    return [NSDecimalNumber decimalNumberWithDecimal:rd]; 
} 
+1

这是我心中最接近的,谢谢 – C0D3LIC1OU5

-1

另一个哈克的方式是:

  1. 将您的号码轮后乘以它由100

INT yourNum = 0.12345 * 100; yourNum现在是12

  • 然后每当需要的数量仅通过100
  • 浮子划分yourNumF = yourNum/100.0;

    我自己不是这种方法的粉丝,但它适合您的要求。 :D