Comme dans de nombreuses langues, les paramètres par défaut de l'opérateur de division Swift à division entière, donc:Pourquoi la conversion rapide fonctionne-t-elle pour la division à virgule flottante?
let n = 1/2
print(n) // 0
Si vous voulez flottante division de points, vous devez faire
let n1 = 1.0/2
let n2 = 1/2.0
let n3 = Double(1)/2
let n4 = 1/Double(2)
print(n1) // 0.5
print(n2) // 0.5
print(n3) // 0.5
print(n4) // 0.5
Encore une fois, comme la plupart des autres langues, vous ne peut pas lancer l'opération:
let n5 = Double(1/2)
print(n5) // 0.0
Ce qui se passe parce que rapide effectue la division entière de 1 et 2 (1/2
) et obtient 0, qu'il essaye alors de lancer à un Double
, en donnant effectivement 0.0.
Je suis curieux de savoir pourquoi les travaux suivants:
let n6 = (1/2) as Double
print(n6) // 0.5
Je me sens comme cela devrait produire les mêmes résultats que Double(1/2)
. Pourquoi pas?
'Double (1/2)' n'est * pas * un cast; c'est une * conversion * de 'Int'' 'Double''. Aucune conversion de ce type n'a lieu pour '(1/2) comme Double', les littéraux entiers sont simplement supposés être des doubles. Comparez https://stackoverflow.com/q/28813516/2976878 – Hamish
Copie possible de [numéro de type Strange Swift] (https://stackoverflow.com/questions/28813516/strange-swift-numbers-type-casting) –