我希望我的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