我希望我的Double显示为Int,如果值为整数 - 否则为Double。打印Double as Int - 如果不是Double值
示例;
var Value = Double()
。
Value = 25.0/10.0
现在我想Value
显示2.5
(当插入标签)
。
Value = 20.0/10.0
现在我想Value
显示2
- 而不是2.0
我希望我的Double显示为Int,如果值为整数 - 否则为Double。打印Double as Int - 如果不是Double值
示例;
var Value = Double()
。
Value = 25.0/10.0
现在我想Value
显示2.5
(当插入标签)
。
Value = 20.0/10.0
现在我想Value
显示2
- 而不是2.0
一个经典的方法是建立一个epsilon的值,它代表了你考虑一个足够接近Int
的值的容忍度:
// How close is close enough to be considered an Int?
let kEPSILON = 0.0001
var val = 1.9999
var str: String
if abs(val - round(val)) < kEPSILON {
str = String(Int(round(val)))
} else {
str = String(val)
}
print(str) // "2"
一种方法是使用%
运营商获得的小数部分,并检查是否是零:
let stringVal = (Value % 1 == 0)
? String(format: "%.0f", Value)
: String(Value)
要将数字显示为文本,请使用NSNumberFormatter()
。您可以设置其minimumFractionDigits
属性设置为零:
let fmt = NSNumberFormatter()
fmt.minimumIntegerDigits = 1
fmt.maximumFractionDigits = 4
fmt.minimumFractionDigits = 0
print(fmt.stringFromNumber(25.0/10.0)!) // 2,5
print(fmt.stringFromNumber(20.0/10.0)!) // 2
print(fmt.stringFromNumber(2.0/7.0)!) // 0,2857
如果你想有一个小数期间,独立于用户的语言环境, 再加入
fmt.locale = NSLocale(localeIdentifier: "en_US_POSIX")
斯威夫特3:
let fmt = NumberFormatter()
// Optional:
fmt.locale = Locale(identifier: "en_US_POSIX")
fmt.minimumIntegerDigits = 1
fmt.maximumFractionDigits = 4
fmt.minimumFractionDigits = 0
print(fmt.string(from: 25.0/10.0 as NSNumber)!) // 2,5
print(fmt.string(from: 20.0/10.0 as NSNumber)!) // 2
print(fmt.string(from: 2.0/7.0 as NSNumber)!) // 0,2857
我喜欢dasblinkenlight's an d vacawama的答案,但也想参与另一个问题:使用NSNumberFormatter
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.alwaysShowsDecimalSeparator = false
let string0 = formatter.stringFromNumber(25.0/10.0)!
let string1 = formatter.stringFromNumber(20.0/10.0)!
print(string0)
print(string1)
结果:
2.5
2
最重要的优势:它是本地化。在德国设备上,它将显示2.5而不是2.5,就像德语用户所期望的那样。
我只会遇到两种不同的情况:'val'是一个Int或'val = 2.5' - 我应该使用'kEPSILON = 0.1'吗? :-) –
在你的情况下,'0.1'可以工作。使用'0.0001'也没有什么坏处。 – vacawama
@RappeStegarn如果val不是int的唯一情况是2.5,那么你可以检查它是否为2.5,如果不是,则将其转换为int。即Int(val) – LulzCow