微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 格式化未知数字的小数位数

我打印出一个我不知道的数字.在大多数情况下,数字是完整的或具有尾随.5.在某些情况下,数字以.25或.75结尾,很少这个数字到千分之一的地方.我如何具体检测最后一个案例?现在我的代码检测到一个整数(0位小数),正好是.5(1位小数),然后在所有其他方案中恢复到2个小数点,但是当它需要时我需要转到3.
class func getFormattednumber(number: Float) -> Nsstring {

    var formattednumber = Nsstring()

    // Use the absolute value so it works even if number is negative
    if (abs(number % 2) == 0) || (abs(number % 2) == 1) {  // Whole number,even or odd
        formattednumber = Nsstring(format: "%.0f",number)
    }

    else if (abs(number % 2) == 0.5) || (abs(number % 2) == 1.5) {
        formattednumber = Nsstring(format: "%.1f",number)
    }

    else {
        formattednumber = Nsstring(format: "%.2f",number)
    }

    return formattednumber

}
Float使用二进制(IEEE 754)表示,无法表示
精确的所有小数部分.例如,
let x : Float = 123.456

在x中存储字节42f6e979,大约是
123.45600128173828.那么x有3个或14个小数位吗?

如果指定了最大数,则可以使用NSNumberFormatter
应该呈现的十进制数字:

let fmt = NSNumberFormatter()
fmt.locale = NSLocale(localeIdentifier: "en_US_POSIX")
fmt.maximumFractionDigits = 3
fmt.minimumFractionDigits = 0

println(fmt.stringFromNumber(123)!)      // 123
println(fmt.stringFromNumber(123.4)!)    // 123.4
println(fmt.stringFromNumber(123.45)!)   // 123.45
println(fmt.stringFromNumber(123.456)!)  // 123.456
println(fmt.stringFromNumber(123.4567)!) // 123.457

Swift 3/4更新:

let fmt = NumberFormatter()
fmt.locale = Locale(identifier: "en_US_POSIX")
fmt.maximumFractionDigits = 3
fmt.minimumFractionDigits = 0

print(fmt.string(for: 123.456)!) // 123.456

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐