在Swift中,去除小数点后面的零并格式化为x位小数

18

这是Swift语言(1.2版)中的内容。

let doubleValue1 = Double(10.116983123)
println(String(format: "%.2f", doubleValue1))

let doubleValue2 = Double(10.0)
println(String(format: "%.2f", doubleValue2))

打印

10.12
10.00

我正在寻找一种方法,可以使用格式化程序或直接字符串格式,而不是通过字符串操作来去除尾部的零,从而打印:

10.12
10

我能达到的最接近的是:

let doubleValue3 = Double(10.0)
println(String(format: "%.4g", doubleValue3))

但是g使用显式数字,这意味着我必须单独计算我的小数位。这听起来像一个丑陋的解决方案。

演示:http://swiftstub.com/651566091/

有什么想法吗?谢谢。


3
这个问题在昨天得到了专家Martin R的精彩回答,链接在这里:https://dev59.com/IIvda4cB1Zd3GeqPbJNk#30622335 - simons
昨天?非常棒 :) - ericosg
1个回答

71

你需要使用NumberFormatter:

    let formatter = NumberFormatter()
    formatter.minimumFractionDigits = 0
    formatter.maximumFractionDigits = 2
    print(formatter.string(from: 1.0000)!) // 1
    print(formatter.string(from: 1.2345)!) // 1.23

这个例子将会在第一个情况下打印1,在第二个情况下打印1.23;你可以根据需要调整最小和最大小数位数。


13
太好了,我刚刚添加了 formatter.minimumIntegerDigits = 1,所以如果左边的数字是零,它就不会被去除,(0.200 将变为 0.2 而不是 .2)。 - Musa almatri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接