将 Double 打印为 Int - 如果不是 Double 值
Print Double as Int - if not a Double value
如果值为整数,我希望我的 Double 显示为 Int - 否则显示为 Double。
示例;
var Value = Double()
.
Value = 25.0 / 10.0
现在我希望 Value
显示 2.5
(当插入标签时)
.
Value = 20.0 / 10.0
现在我希望 Value
显示 2
- 而不是 2.0
一种方法是使用 %
运算符获取小数部分,并检查它是否为零:
let stringVal = (Value % 1 == 0)
? String(format: "%.0f", Value)
: String(Value)
一种经典方法是为 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"
要将数字显示为文本,请使用 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")
Swift 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 和 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,正如德语用户所期望的那样。
在 Swift 4 上使用计算器,我将数字变量视为 String,这样我就可以在屏幕上显示它们并将它们转换为 Double 用于计算,然后将它们转换回 String 以显示结果。当结果是 Int 时,我不想也显示 .0,所以我解决了这个问题,这非常简单
if result.truncatingRemainder(dividingBy: 1) == 0{
screenLabel.text = String(Int(result))
}
else{
screenLabel.text = String(result)
}
所以 result 是 Double 格式的变量,如果除以 1 则得到 0(完美除法意味着它是 Int), 我把它转换成Int。
如果值为整数,我希望我的 Double 显示为 Int - 否则显示为 Double。
示例;
var Value = Double()
.
Value = 25.0 / 10.0
现在我希望 Value
显示 2.5
(当插入标签时)
.
Value = 20.0 / 10.0
现在我希望 Value
显示 2
- 而不是 2.0
一种方法是使用 %
运算符获取小数部分,并检查它是否为零:
let stringVal = (Value % 1 == 0)
? String(format: "%.0f", Value)
: String(Value)
一种经典方法是为 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"
要将数字显示为文本,请使用 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")
Swift 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 和 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,正如德语用户所期望的那样。
在 Swift 4 上使用计算器,我将数字变量视为 String,这样我就可以在屏幕上显示它们并将它们转换为 Double 用于计算,然后将它们转换回 String 以显示结果。当结果是 Int 时,我不想也显示 .0,所以我解决了这个问题,这非常简单
if result.truncatingRemainder(dividingBy: 1) == 0{
screenLabel.text = String(Int(result))
}
else{
screenLabel.text = String(result)
}
所以 result 是 Double 格式的变量,如果除以 1 则得到 0(完美除法意味着它是 Int), 我把它转换成Int。