Objective c 将NSNumber四舍五入到特定的有效位数

Objective c 将NSNumber四舍五入到特定的有效位数,objective-c,nsnumber,Objective C,Nsnumber,假设我有一个NSNumber对象,它保存一个值0.12345。我想要的是一个具有相同值的NSNumber对象,但四舍五入到指定的有效位数,比如2,所以值看起来像这样:0.12 我不想将其转换为NSString并返回,这是一些 我不希望手动进行强制转换和/或乘法/除法 有没有一种明显的方法是我没有的?要做到这一点并保持所有的约束条件几乎是不可能的NSNumber没有舍入方法,因此您必须转换为其他方法。最明显的方法是转换成双精度和乘法,四舍五入和除法,但是你说你不愿意这样做。这就剩下这条路线了:

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

  • 我不想将其转换为
    NSString
    并返回,这是一些
  • 我不希望手动进行强制转换和/或乘法/除法

有没有一种明显的方法是我没有的?

要做到这一点并保持所有的约束条件几乎是不可能的
NSNumber
没有舍入方法,因此您必须转换为其他方法。最明显的方法是转换成双精度和乘法,四舍五入和除法,但是你说你不愿意这样做。这就剩下这条路线了:

NSNumber *round(NSNumber *number, NSInteger places, NSRoundingMode mode) {
    NSDecimal d = number.decimalValue;
    NSDecimal rd;
    NSDecimalRound(&rd, &d, places, mode);
    return [NSDecimalNumber decimalNumberWithDecimal:rd];
}
另一种黑客方式是:

  • 将数字乘以100后,将其转换为四舍五入
  • int yourNum=0.12345*100; 你现在的数字是12

  • 当你需要这个数字时,只要除以100
  • 浮动yourNumF=yourNum/100.0


    我本人并不喜欢这种方法,但它符合您的要求D

    NSNumber
    没有任何内置的舍入功能。你可以使用
    NSDecimalNumber
    ,这样做。再解释一下你的目标。你为什么需要对NSNumber进行四舍五入?“我不想……”解释你为什么不想用数学解决数学问题。在你的链接问题中有很多答案,从坏到好(分数会有帮助)。这是最接近我的想法,谢谢