打印Double作为Int - 如果不是Double值

时间:2016-04-15 13:34:55

标签: xcode swift int double

我希望我的Double显示为Int,如果值是整数 - 否则显示为Double。

实施例

var Value = Double()

Value = 25.0 / 10.0

现在我希望Value显示2.5(插入标签时)

Value = 20.0 / 10.0

现在我希望Value显示2 - 而不是2.0

5 个答案:

答案 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 中转换它。