2015-02-05 3 views
1

Я хочу задать концептуальный вопрос. Мой код должен печатать на консоль массив значений с плавающей точкой 5 десятичных знаков. Почему это должно быть String вместо Float? Ans [y] - массив типа float.swift println float using string

println(String(format: "%.5f", Ans[y])) 

Вместо поплавка

println(Float(format: "%.5f", Ans[y])) 

Float дает ошибку дополнительный аргумент «формат» в вызове

ответ

0

Это просто вопрос понимания того, что ваши слова означают. Строка - это тип объекта (структура). Float - это тип объекта (структура). Синтаксис Thing(...) вызывает a Thing initializer - он создает новый объект типа Thing и вызывает метод инициализации init(...). Это то, что вы делаете, когда говорите String(...) и Float(...).

Ну, есть строка init(format:) инициализатор (это на самом деле происходит от Фонда NSString, к которым перекрыт String), но нет Float init(format:) инициализатора - Поплавок структура не декларирует такую ​​вещи. Поэтому во втором коде вы вызываете несуществующий метод.

0

Вы можете использовать NSLog вместо println. NSLog по-прежнему находится в базовом классе и имеет гибкость в определении точного формата, который вам нужен.

2

Вы можете использовать map() для форматирования массива Float в виде массива строк. Кстати, вы должны дать ему имя, начинающееся с строчной буквы. Попробуйте сделать следующее:

let floatArray:[Float] = [1.23456,3.21098,2.78901] 
let formattedArray = floatArray.map{String(format: "%.5f", $0)} 
println(formattedArray) // "[1.23456, 3.21098, 2.78901]"