0
Code Coach: Paint Cost - Swift (bug?)
I am attempting the paint cost code coach with Swift, but I am running into a weird issue. Idk if it is a bug, but I'm guessing there is some sort of explanation I'm not understanding. I have the following: var colors = readLine()! var cost = (40.0+5.0*Double(colors)!)*1.1 print(Int(cost.rounded(.up))) The problem is when the program inputs "2", var cost somehow comes out to 55.00000000000001 instead of an even 55. This makes the program round to up to 56, when it should be an even 55 rounded up to stay 55. I need the round up for the other tests it puts in. Why on earth does the equation come out to thirteen zeros followed by a 1 in the decimal place??? I'm so confused.
4 Antworten
+ 1
It is because of floating point convertions.. Not the bug.
Do Swift don't have a ceil function...
In other languages, ceil rounds up.. But I don't know Swift but I think there exits in math module
Edit: Michelle
Not a bug. It's nature of binary floating point numbers. So that's why it is not advisable to relay of floating point numbers in large codes because that messy thing.
This will explain in more details, take a look
https://docs.python.org/3/tutorial/floatingpoint.html#tut-fp-issues)
0
Interesting. I do understand now. However, I'm still not quite sure how to get around it, but I'll play around with the code to see what other ways I can accomplish what I'm trying to.
Jayakrishna, as far as I'm aware the version of Swift on here uses rounded(.up) instead of the ceil function. I found both mentioned for Swift when I Googled it but only found the former to work. It does indeed work and I have used it in another Code Coach.
0
Michelle this working...
print( (3.1).rounded(.up) )
0
Yes, that does work. I wasn't actually having trouble with the rounding, just the fact that that it was giving me a weird decimal.
I have now successfully completed the challenge by simply doing the price calculation and then the tax calculation separately. Then I just added them together. Somehow that avoided the decimal issue. Not 100% sure why, but it works.
Thanks for the help!