我希望我的Double显示为Int,如果值是整数 - 否则显示为Double。
实施例
var Value = Double()
Value = 25.0 / 10.0
现在我希望Value
显示2.5
(插入标签时)
Value = 20.0 / 10.0
现在我希望Value
显示2
- 而不是2.0
答案 0 :(得分:4)
一种方法是使用NSDateComponents
运算符获取小数部分,并检查它是否为零:
%
答案 1 :(得分:3)
一种经典的方法是为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"
答案 2 :(得分: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")
斯威夫特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
答案 3 :(得分:2)
我喜欢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,正如德语用户所期望的那样。
答案 4 :(得分:0)
在Swift 4上使用计算器,我将数字变量视为 String ,这样我就可以在屏幕上显示它们并将它们转换为 Double 进行计算,然后转换他们回到字符串来显示结果。当结果是 Int 时,我不希望显示.0,所以我解决了这个问题很简单
->add('postalcode', NumberType::class)
所以结果是 Double 格式的变量,如果除以1,它给出0(完美分割意味着它的 Int ),我在 Int 中转换它。