2015-06-10 42 views
2

我試圖格式化爲UInt64.max返回的整數以將逗號添加到數字。萬一它很重要,我現在正在寫一個「遊樂場」,我正在使用XCode 6.3.2。如何格式化UInt64.max以添加逗號

下面是相關代碼:

//: Playground - noun: a place where people can play 

import UIKit 

// MARK: - Integer Bounds 

var formatter = NSNumberFormatter() 
formatter.numberStyle = .DecimalStyle 

println(formatter.stringFromNumber(100000)) 
println(formatter.stringFromNumber(100000000)) 
println(formatter.stringFromNumber(NSNumber(char: Int8.min))) 

println(Int8.min) 
println(Int8.max) 

println(UInt8.min) 
println(UInt8.max) 

println(Int16.min) 
println(formatter.stringFromNumber(NSNumber(short: Int16.min))) 
println(Int16.max) 
println(formatter.stringFromNumber(NSNumber(short: Int16.max))) 

println(UInt16.min) 
println(UInt16.max) 
println(formatter.stringFromNumber(NSNumber(unsignedShort: UInt16.max))) 

println(Int32.min) 
println(formatter.stringFromNumber(NSNumber(int: Int32.min))) 
println(Int32.max) 
println(formatter.stringFromNumber(NSNumber(int: Int32.max))) 

println(UInt32.min) 
println(UInt32.max) 
println(formatter.stringFromNumber(NSNumber(unsignedInt: UInt32.max))) 

println(Int64.min) 
println(formatter.stringFromNumber(NSNumber(longLong: Int64.min))) 
println(Int64.max) 
println(formatter.stringFromNumber(NSNumber(longLong: Int64.max))) 

println(UInt64.min) // 0 
println(UInt64.max) // 18446744073709551615 
println(formatter.stringFromNumber(NSNumber(unsignedLongLong: UInt64.max))) // Optional("-1") 

所有這些返回格式正確的數除了最後一個(UInt64.max)。

如圖所示,最後一行(我嘗試使用格式化程序添加逗號)返回Optional("-1")

如何才能打印UInt64.max用逗號格式化?

+0

看起來像一個錯誤對我來說。似乎每個數字> Int64.max都被格式化爲負數。 –

+0

這裏我的問題可能是這個問題的重複:http://stackoverflow.com/questions/24218918/why-is-uint64-max-equal-1-in-swift –

回答

0

在的OBJ-C(以防萬一):

NSNumber *num = [NSNumber numberWithDouble:18446744073709551615.]; 

NSNumberFormatter *formatter; 
formatter = [[NSNumberFormatter alloc] init]; 

formatter.numberStyle = kCFNumberFormatterDecimalStyle; 
[formatter setMaximumFractionDigits:0]; 
[formatter stringFromNumber:num]; 

NSString *formattedString = [formatter stringFromNumber:num]; 

NSLog(@"%@", formattedString); 

結果18,446,744,073,709,600,000

在夫特

var num = 18446744073709551615.0 

    var formatter = NSNumberFormatter() 
    formatter.numberStyle = .DecimalStyle 
    formatter.maximumFractionDigits = 0 
    formatter.stringFromNumber(num) 

    println(formatter.stringFromNumber(num)) 

結果可選( 「18,446,744,073,709,600,000」)

+2

'18,446,744,073,709,600,000'不是真正的預期輸出: )'Double'不能精確地表示'UInt64.max'。 –

+1

對不起,但我希望打印用逗號格式化的'UInt64.max'的值,而不是將數字'18446744073709551615'設置爲變量並打印用逗號格式化的變量。 –

+0

無論如何轉換爲double都會更改該值。詮釋溢出問題。哎呦! – mondousage