Python Forum
Number bug, calculation is wrong
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Number bug, calculation is wrong
#1
so here is my code
        elif im.lower() in ("inh, inhalation, inhala"):     # inhalation
            barn = (input("Barn eller voksen? "))
            if barn.lower() in ("voksen", "vok"):           # to adults
                print("1 mg blandes op i 2 ml saltvand og gives på nebulisator")
            elif barn.lower() in ("barn", "ba", "bar"):     # to child
                vaegt = int(input("Hvad vejer barnet? "))
                inhalation = vaegt * 0.1  #Here is what should be calculated
                if inhalation > 1:
                    print("1 mg blandes op i 2 ml saltvand og gives på nebulisator")
                else:
                    print(inhalation, "mg blandes op i 2 ml saltvand og gives på nebulisator") #This is broken, i think.
if you type in "7" in line 6, the output will be 0.7000000000000001. it just needs to be 0.7. why does it do that?
i am writing in JetBrains pycharm
Reply
#2
https://docs.python.org/3/tutorial/floatingpoint.html

Floating point is an approximation. Remember we are working with base 2. The above has a nice discussion of floating point and the inherent errors, in any programming language, of using it.
Reply
#3
Python has built-in module decimal which purpose defined as: "The decimal module provides support for fast correctly-rounded decimal floating point arithmetic."

>>> import decimal
>>> decimal.getcontext().prec = 2   # set precision to 2 (default is 28)
>>> vaegt = decimal.Decimal(input("Hvad vejer barnet? "))                 
Hvad vejer barnet? 7
>>> inhalation = vaegt * decimal.Decimal(0.1)
>>> print(inhalation)
0.70
>>> inhalation
Decimal('0.70')
It's important to note:

Quote:The significance of a new Decimal is determined solely by the number of digits input. Context precision and rounding only come into play during arithmetic operations.

This means that:

>>> decimal.Decimal(7 * 0.1)                                              
Decimal('0.70000000000000006661338147750939242541790008544921875')
>>> decimal.Decimal(7) * decimal.Decimal(0.1)                             
Decimal('0.70')
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Am I wrong or is Udemy wrong? String Slicing! Mavoz 3 2,387 Nov-05-2022, 11:33 AM
Last Post: Mavoz
  The code I have written removes the desired number of rows, but wrong rows Jdesi1983 0 1,603 Dec-08-2021, 04:42 AM
Last Post: Jdesi1983
  python gives wrong string length and wrong character thienson30 2 2,944 Oct-15-2019, 08:54 PM
Last Post: Gribouillis
  Correct number wrong position func. albry 5 5,963 Jan-11-2019, 04:01 PM
Last Post: Larz60+
  [Regex] Findall returns wrong number of hits Winfried 8 5,687 Aug-23-2018, 02:21 PM
Last Post: Winfried

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020