値が整数の場合はDoubleをIntとして表示し、そうでなければDoubleとして表示します。DoubleをIntとして出力 - Double値でない場合
例;
var Value = Double()
。
Value = 25.0/10.0
は、今私は(ラベルに挿入された時)Value
が
を2.5
を表示したいです。
Value = 20.0/10.0
今私はValue
が2
表示したい - とNOT 2.0
値が整数の場合はDoubleをIntとして表示し、そうでなければDoubleとして表示します。DoubleをIntとして出力 - Double値でない場合
例;
var Value = Double()
。
Value = 25.0/10.0
は、今私は(ラベルに挿入された時)Value
が
を2.5
を表示したいです。
Value = 20.0/10.0
今私はValue
が2
表示したい - とNOT 2.0
1つの古典的な方法は、イプシロンの値を確立することです。これは、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()
を使用します。あなたは、小数点期間をしたい場合は、
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を追加します:あなたはゼロにそのminimumFractionDigits
プロパティを設定することができ
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が好きですD vacawamaの答えをするだけでなく、別のものを貢献したい:
2.5
2
最も重要な利点:それがローカライズされている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.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