Nat*_*orn 23 cocoa objective-c rounding
我正在努力想出一些看起来应该非常简单的事情.我需要准确地将NSDecimalNumber舍入到特定数量的小数位(在运行时确定).据我所知,我有两个选项,我都不喜欢.
还有另外一种我错过的方式吗?必须有一个简单的方法来完成NSDecimalNumbers的舍入,但我似乎无法弄清楚它的生命是什么.
Cur*_*bit 33
您只需decimalNumberByRoundingAccordingToBehavior:使用所需的NSDecimalNumberBehaviors协议进行呼叫.请参阅开发文档中的NSDecimalNumberBehaviors参考资料.
更新:见http://www.cimgf.com/2008/04/23/cocoa-tutorial-dont-be-lazy-with-nsdecimalnumber-like-me/
Dav*_*ton 20
对于那些喜欢示例代码的人......
要舍入到2位小数(12345.68):
NSDecimalNumber *originalNumber = [NSDecimalNumber decimalNumberWithString:@"12345.6789"];
NSDecimalNumberHandler *behavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain
scale:2
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:NO];
NSDecimalNumber *roundedNumber = [originalNumber decimalNumberByRoundingAccordingToBehavior:behavior];
Run Code Online (Sandbox Code Playgroud)
要舍入到最接近的千位(12000):
NSDecimalNumber *originalNumber = [NSDecimalNumber decimalNumberWithString:@"12345.6789"];
NSDecimalNumberHandler *behavior = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundPlain
scale:-3
raiseOnExactness:NO
raiseOnOverflow:NO
raiseOnUnderflow:NO
raiseOnDivideByZero:NO];
NSDecimalNumber *roundedNumber = [originalNumber decimalNumberByRoundingAccordingToBehavior:behavior];
Run Code Online (Sandbox Code Playgroud)
我使用Swift 3中的以下代码工作.
let amount = NSDecimalNumber(string: "123.456789")
let handler = NSDecimalNumberHandler(roundingMode: .plain, scale: 2, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
let roundedAmount = amount.rounding(accordingToBehavior: handler)
Run Code Online (Sandbox Code Playgroud)
请注意scale参数,用于定义所需的小数位数.在此概述:https://developer.apple.com/reference/foundation/nsdecimalnumberhandler/1578295-decimalnumberhandlerwithrounding
| 归档时间: |
|
| 查看次数: |
12115 次 |
| 最近记录: |