将 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)
    }

所以 resultDouble 格式的变量,如果除以 1 则得到 0(完美除法意味着它是 Int), 我把它转换成Int