2016-04-15 23 views
2

値が整数の場合はDoubleをIntとして表示し、そうでなければDoubleとして表示します。DoubleをIntとして出力 - Double値でない場合

例;

var Value = Double() 

Value = 25.0/10.0 

は、今私は(ラベルに挿入された時)Value

2.5を表示したいです。

Value = 20.0/10.0

今私はValue2表示したい - とNOT 2.0

答えて

3

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" 
+0

私は 'val'はIntまたは' val = 2.5'のどちらかです - 'kEPSILON = 0.1'を使うべきでしょうか? :-) –

+0

あなたのケースでは、 '0.1'が動作します。 '0.0001'の使用にも問題ありません。 – vacawama

+0

@RappeStegarn valがintでない唯一のケースが2.5の場合は、それが2.5かどうかを確認し、そうでない場合はintとしてキャストします。すなわちInt(val) – LulzCow

4

一つのアプローチは、%演算子を使用して小数部分を得ることであり、それがゼロであるかどうかを確認:

let stringVal = (Value % 1 == 0) 
? String(format: "%.0f", Value) 
: String(Value) 
2

数字をテキストとして表示するには、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 
2

私は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が表示されます。

関連する問題