назначить десятичное значение переменной как двойное - PullRequest
0 голосов
/ 16 апреля 2020

Мой приведенный ниже код swift пытается изменить значение num на 0,5. Если бы я пытался изменить значение на 1, этот код работал бы без проблем. Однако сейчас код печатает ноль в разделе отладки. Просто хочу конвертировать в 0.5

    import UIKit

class ViewController: UIViewController {

    var num = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        num = Int(Double(0.5))
        alterImage()
    }
    func alterImage(){
          print("This is the count : ",num)
    }


}

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

This:

var num = 0

Неявно устанавливает тип переменной на Int. Вы не можете присвоить ему значение с плавающей запятой, например, 0,5 (например, Float или Double).

Когда вы делаете следующее, вы конвертируете значение 0,5 типа Double в Int который может представлять только целочисленные значения, такие как 1, 2 и т. д. c ... Это приводит к тому, что значение tu округляется до его целочисленной части, то есть здесь 0:

num = Int(Double(0.5))
/* num is rounded to its integer part, 0 */

Если вы хотите, чтобы ваша переменная num, чтобы быть значением с плавающей запятой, таким как 0,5 или 4,346 или чем-то еще, вы должны объявить его как Float или Double, который может представлять такие числа. Вы можете сделать оба:

var num = 0.0
// or:
var num: Double = 0

Первая версия неявно объявляет переменную как Double из-за .. Во второй версии явно указывается тип.

Затем вы можете присвоить ему любое значение с плавающей запятой в вашем viewDidLoad() без преобразования в Int (ни Double, его бесполезно, поскольку 0,5 уже Double ):

class ViewController: UIViewController {
    var num = 0.0

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.

        num = 0.5
        // ...
    }
    // ...
}

Примечание:

  • Настоятельно рекомендуем прочитать документацию Apple о типах и инициализации литералами.
  • 0,5 не Decimal, как вы заявляете в заголовке. Decimal фактически существует в стандартной библиотеке Swift, но его следует объявить так.
0 голосов
/ 16 апреля 2020

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

0.1 -> 0
0.2 -> 0
.
0.5 -> 0
.
0.9 -> 0
1.0 -> 0

Если вы хотите получить 1, когда значение Double 0,5. вам нужно округлить двойное значение до

var num = Int(Double(0.5).rounded(.up))
print(num) //1

подробнее Целые числа

...