Python Forum
Error in Python 3.6 and how to limit decimal places
Thread Rating:
  • 1 Vote(s) - 1 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Error in Python 3.6 and how to limit decimal places
#1
Using Python 3.6 and tkinter that comes with it.

My tkinter code:
for myvalue in range(2,11):
    Radiobutton(rightFrame, text=myvalue*.1, font=(None, 14), variable=var, value=myvalue).pack()
Produces radio buttons with the following values:
o 0.2
o 0.30000000000000004
o 0.4
o 0.5
o 0.60000000000000001
o 0.70000000000000001
o 0.8
o 0.9
o 1.0

Why does Python 3.6 erroneously calculate the .3, .6 and .7 values?
And more importantly, what's the simplest way to limit the output to one decimal place using my code?
Reply
#2
Quote:what's the simplest way to limit the output to one decimal place using my code?

utilize the format method
>>> value = 0.60000000000000001
>>> '{:.1}'.format(value)
'0.6'
Recommended Tutorials:
Reply
#3
(Mar-17-2017, 09:24 PM)Raptor88 Wrote: Why does Python 3.6 erroneously calculate the .3, .6 and .7 values?

It's called floating point arithmetic. The numbers aren't stored as decimals, they're stored as the fraction of two binary integers. For some decimals they can get close, but not quite there.
Craig "Ichabod" O'Brien - xenomind.com
I wish you happiness.
Recommended Tutorials: BBCode, functions, classes, text adventures
Reply
#4
(Mar-17-2017, 09:24 PM)Raptor88 Wrote: Why does Python 3.6 erroneously calculate the .3, .6 and .7 values?
It's the way floating point arithmetic work,Basic Answers Python doc.
(Mar-17-2017, 09:31 PM)Raptor88 Wrote: Using Python 3.6
36 has also new f-string.
>>> value = 0.30000000000000004
>>> f'{value:.1}'
'0.3'
There is also a Decimal module.
>>> 0.4 - 0.1
0.30000000000000004

>>> from decimal import Decimal
>>> Decimal('0.4') - Decimal('0.1')
Decimal('0.3')
Reply
#5
metulburr, ichabod801 and snippsat,
    Thanks for your responses.

I tried the suggestions from metulburr and snippsat:
# metulburr:
for myvalue in range(2,11):
    Radiobutton(rightFrame, text='{:.1}'.format(myvalue*.1), font=(None, 14), variable=var, value=myvalue).pack()

#snippsat:
for myvalue in range(2,11):
    Radiobutton(rightFrame, text=f'{myvalue*.1:.1}', font=(None, 14), variable=var, value=myvalue).pack()
But they both result in the following output:
o 0.2
o 0.3
o 0.4
o 0.5
o 0.6
o 0.7
o 0.8
o 0.9
o 1e+00

How can I get 1.0 for the last radio widget using your code?

I could use the for loop for values 0.2 to 0.9 and a separate statement for the last 1.0 radio widget.  But interested in how to resolve the problem using your code.
Reply
#6
Add f.
>>> value = 1e+00
>>> f'{value:.1}'
'1e+00'

# f
>>> f'{value:.1f}'
'1.0'
>>> '{:.1f}'.format(value)
'1.0'
Reply
#7
(Mar-17-2017, 10:54 PM)snippsat Wrote: Add f.
..... snip .....

snippsat,

Adding f produces perfect output.  For other beginners, here's the code:
for myvalue in range(2,11):
    Radiobutton(rightFrame, text=f'{myvalue*.1:.1f}', font=(None, 14), variable=var, value=myvalue).pack()
.
.
Using your other suggestion, I like the following code better since it's easier to understand and also produces perfect output:
for myvalue in range(2,11):
    Radiobutton(rightFrame, text=myvalue*Decimal('.1'), font=(None, 14), variable=var, value=myvalue).pack()
Thanks for your help,
Raptor88
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Python Struct Question, decimal 10, \n and \x0a. 3python 2 666 Aug-11-2023, 09:29 AM
Last Post: 3python
  Can I Limit Value used by python pajd 9 2,165 Feb-10-2022, 09:54 PM
Last Post: pajd
  Calculate the Euler Number with more decimal places Pedroski55 10 4,504 Oct-31-2021, 04:45 AM
Last Post: Pedroski55
  How to use a variable in Python (2.x) to define decimal part? MDRI 4 2,331 May-07-2021, 12:39 AM
Last Post: MDRI
  Not rounding to desired decimal places? pprod 2 2,560 Mar-05-2021, 11:11 AM
Last Post: pprod
  Decimal Rounding error project_science 4 2,760 Jan-06-2021, 03:14 PM
Last Post: project_science
  Can I format decimal places by column with a dictionary? Mark17 2 2,562 Dec-28-2020, 10:13 PM
Last Post: Mark17
  Time Limit Exceeded error loves 5 3,148 Dec-03-2020, 07:15 AM
Last Post: Sofia_Grace
  python decimal scale precision massimo_m 5 5,418 Aug-22-2019, 11:47 AM
Last Post: perfringo
  testing for Decimal w/o importing decimal every time Skaperen 7 4,452 May-06-2019, 10:23 PM
Last Post: Skaperen

Forum Jump:

User Panel Messages

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