2015-06-10 2 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

В Swift

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' на самом деле не ожидаемый результат:) «Двойной» не может точно представлять «UInt64.max». –

+1

Извините, но я надеюсь напечатать значение 'UInt64.max', отформатированное запятыми, а не устанавливать число' 18446744073709551615' в переменную и печатать эту переменную, отформатированную запятыми. –

+0

Преобразование в double изменило значение независимо. Проблемы с переполнением Int. Упс! – mondousage

Смежные вопросы