Home > other >  Why is x / 100 == 0 when x != 0 in swift?
Why is x / 100 == 0 when x != 0 in swift?

Time:09-26

I have created a for loop in which I calculate a few values.

for i in 1...100{
  let xValue = i/100
  print(xValue) // returns 0 every time except when i == 100
}

This is a recreation of a part of that for loop. Why is it that I do not get the right value for 'xValue'?

For info I have also tried the following:

let xValue: Float = Float(i/100)

And that doesn't work either, despite me being very specific. I must have forgotten something basic about these arithmetic operators in swift.

CodePudding user response:

When you divide an Int by an Int, the result will be rounded down. Use a floating point type, like Double or Float for more precision.

for i in 1...100 {
  let xValue = Float(i)/100
  print(xValue)
}

To address your attempted solution - when you do:

let xValue: Float = Float(i/100)

The Int result is first computed in i/100 (and rounded down to 0) then you are casting to a Float. Therefore, we cast i to a Float before the division so the result is computed as a Float.

CodePudding user response:

Since i and 100 are both integer values, / will do integer division and the result will be truncated to 0.

Even when you do let xValue: Float = Float(i/100), the result of division inside the parentheses is already truncated to 0 before the value can be converted to a Float.

Convert i to a floating-point value before dividing to prevent the result from being truncated.

for i in 1...100{
  let xValue = Float(i)/100
  print(xValue)
}
  • Related