将 NSNumber 舍入到特定数量的有效数字

Round NSNumber to a specific number of significant digits

假设我有一个包含值 0.12345NSNumber 对象。我想要的只是一个具有相同值的 NSNumber 对象,但四舍五入到指定数量的有效数字,比如 2,所以值看起来像这样:0.12

是否有一种我缺少的明显方法?

要做到这一点并保持所有约束几乎是不可能的。 NSNumber 没有舍入方法,因此您将不得不转换为其他方法。显而易见的路线是转换为双精度和乘法、舍入和除法,但您说您不想这样做。这样就留下了这条路线:

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

另一种 hacky 方法是:

  1. 将您的数字乘以 100 后将其转换为四舍五入。

int yourNum = 0.12345 * 100; yourNum 现在是 12.

  1. 然后只要你需要这个数字除以 100 就可以了。

float yourNumF = yourNum / 100.0;

我自己不喜欢这种方法,但它符合您的要求。 :D