2015-06-05 4 views
1

Я работаю над приложением, которое должно выполнить некоторое отображение и вычисление двойных типов в Swift. Созданная мной структура принимает Double как параметр, и поскольку она также отображает ее, я хотел бы сохранить конечный ноль в конце значения. Тем не менее, я не могу заставить уходящий ноль быть усеченным.Сохранение конечных нулей из .doubleValue() в Swift

Вот что я пытался в Playground:

let numberString = "-3.60" 


// "3.60" 
let positiveString = numberString.stringByReplacingOccurrencesOfString("-", withString: "", options: nil, range: nil) 


// 3.6 
let positiveDouble = (positiveString as NSString).doubleValue 


// "3.60" 
let positiveDoubleString = NSString(format: "%0.02f", positiveDouble) 


// 3.6 
let positiveDoubleWithZeros = positiveDoubleString.doubleValue 

Я получаю 3.6 как результат, независимо от того, что я стараюсь. Какая очевидная часть конверсии, которую я пропускаю?

+1

'positiveDoubleWithZeros' - число с плавающей запятой и 3.6 == 3.60. Если вы хотите отобразить номер с двумя дробными цифрами, используйте * string * 'positiveDoubleString'. –

+0

@MartinR Итак, я не должен волноваться о концевом ноль в двойном значении, а просто использовать строковое значение для отображения после форматирования его с конечным нолем? Это имеет смысл. –

+1

Да. Двойное значение не имеет «конечного нуля». То, что вы видите как 3.6 на игровой площадке, - это снова преобразование числа с плавающей точкой в ​​строку. –

ответ

4

Вы должны использовать NSNumberFormatter:

let formatter = NSNumberFormatter() 
formatter.minimumFractionDigits = 2 
formatter.maximumFractionDigits = 3 
println(formatter.stringFromNumber(1.0000)) 
println(formatter.stringFromNumber(1.2345)) 

Этот пример напечатает 1,00 для первого случая и 1.234 для второго, количество минимального и максимального знаков после запятой можно отрегулировать, как вам нужно.

Надеюсь, что это поможет!

+0

И NSNumberFormatter, и 'String (format :) могут форматировать число с плавающей запятой, поэтому вы можете выбрать, который лучше всего соответствует вашим потребностям. Но это не связано с этим * вопросом *, поэтому номер * final * отображается как 3,6 вместо 3,60. –

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