Как преобразовать int в double в swift?

Я посмотрел ответы для преобразования int в поплавки и другие подобные ответы, но они не делают именно то, что я хочу.

Я пытаюсь создать базовую программу, которая принимает число, выполняет на нем различные вычисления, и результаты этих вычислений добавляются вместе в конце.

для одного из этих вычислений я создал сегментированный контроллер с 3 различными значениями ниже

 var myValues: [Double] = [0.00, 1.00, 1.50]
 var myValue = [myValuesSegmentedController.selectedSegmentIndex]

тогда, когда одно из этих значений выбранный, он добавляется к конечной стоимости. Все значения складываются в два раза до 2 знаков после запятой.

var totalAmount = valueA + valueB + valueC + myValue

проблема в том, что swift не позволит мне добавить "myValue" к этим окончательным вычислениям. Это дает мне ошибку:

Swift Compiler Error. Cannot invoke '+' with an argument list of type '($T7, @lvalue [int])'

что мне нужно сделать, чтобы изменить это значение на Double? Или что я могу сделать, чтобы получить подобный результат?

4 ответов


проблема в том, что вы пытаетесь добавить массив вместо Int, поэтому вам даже не нужно ничего преобразовывать, учитывая, что все ваши значения уже удваиваются, и ваш индекс фактически должен быть Int. Так что

 let myValues = [0.00, 1.00, 1.50]
 let myValue = [myValuesSegmentedController.selectedSegmentIndex] // your mistake is  here, you are creating one array of integers with only one element(your index)

правильным было бы что-то вроде этого:

let myValues = [0.00, 1.00, 1.50]
let totalAmount = myValues.reduce(0, combine: +) + myValues[myValuesSegmentedController.selectedSegmentIndex]

вы можете бросить его с Double() такой

var totalAmount = valueA + valueB + valueC + Double(myValue)

поставить это на детской площадке:

var myValues: [Double] = [0.00, 1.00, 1.50]
let valueA = 1
let valueB = 2
let valueC = 3
var totalAmount = Double(valueA + valueB + valueC) + myValues[2]
println(totalAmount)  //output is 7.5

valueA/B / C все выводятся как Int.

totalAmount выводится как Double


преобразование float до целое на Свифт. Основной кастинг как это не работает, потому что эти переменные не являются примитивами, в отличие от терки и ints на С:

var float:Float = 2.2
var integer:Int = float as Float