舍入货币字符串

时间:2014-08-26 01:05:20

标签: ios ios7 swift ios8

我能够将此函数编写为NSDecimalNumber的扩展方法,这对我来说非常好。它需要一些数字并将其格式化为货币字符串。如果它包含.00,它将截断它,但如果它是.23或.45,它将保留小数。

func toCurrencyString() -> String
{
    let nf = NSNumberFormatter()
    nf.numberStyle = NSNumberFormatterStyle.CurrencyStyle

    //Determine whether to show decimals or not (if trailing zeros exist, do not show)
    if (trunc(self.floatValue) == self.floatValue) {
        nf.maximumFractionDigits = 0
    } else {
        nf.maximumFractionDigits = 2
    }
    return nf.stringFromNumber(self)
}

我有一个问题: 如何实现上面返回格式化字符串的类似函数,但是将其四舍五入?所以像45.55这样的东西就是46(没有小数)

我尝试使用在游乐场中运行的round(),但是当我使用它的扩展方法时,它表示'使用round()'的模糊不清。

另外......好奇心,对于不同的语言环境,以上是安全的,就像它在美国完美地展示给我一样,但是如果用户的手机在英国会自动运行吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我找了一点,但我明白了:

func toRoundedCurrencyString() -> String
{
    let nf = NSNumberFormatter()
    nf.numberStyle = NSNumberFormatterStyle.CurrencyStyle
    nf.maximumFractionDigits = 0
    var roundingStyle = NSDecimalNumberHandler(roundingMode: NSRoundingMode.RoundBankers, scale: 0, raiseOnExactness: false, raiseOnOverflow: false, raiseOnUnderflow: false, raiseOnDivideByZero: false)
    var roundedNumber = self.decimalNumberByRoundingAccordingToBehavior(roundingStyle)
    return nf.stringFromNumber(roundedNumber)
}

运作良好,但关注其他人说。我使用NSDecimalNumber扩展方法。不是NSDecimalNumber处理货币的首选方式吗?顺便说一句,我使用货币< 10万,如果重要吗?这只是大型货币,它是一个大问题吗?如果是偶数,我总是使用最多2位小数。