PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Sunday, August 7, 2022

[FIXED] How to display two decimal points in python, when a number is perfectly divisible?

 August 07, 2022     decimal, fixed-point, python, string-formatting     No comments   

Issue

Currently I am trying to solve a problem, where I am supposed to print the answer upto two decimal points without rounding off. I have used the below code for this purpose

import math
a=1.175                            #value of a after some division
print(math.floor(a*100)/100)

The output we get is:

1.17                              #Notice value which has two decimal points & not rounded

But the real problem starts when I try to print a number which is evenly divisible, after the decimal point only one zero is displayed. I have used the same code as above, but now

a=25/5                                   #Now a is perfectly divisible
print(math.floor(a*100)/100)

The output displayed now is

5.0                                      #Notice only one decimal place is printed

what must be done rectify this bug?


Solution

The division works and returns adequate precision in result.

So your problem is just about visualization or exactly:

  • string-representation of floating-point numbers

Formatting a decimal

You can use string-formatting for that. For example in Python 3, use f-strings:

twoFractionDigits = f"{result:.2f}"

or print(f"{result:.2f}")

The trick does .2f, a string formatting literal or format specifier that represents a floating-point number (f) with two fractional digits after decimal-point (.2).

See also:

  • Fixed digits after decimal with f-strings
  • How to format a floating number to fixed width in Python

Try on the Python-shell:

Python 3.6.9 (default, Dec  8 2021, 21:08:43) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> a=1.175                            #value of a after some division
>>> result = math.floor(a*100)/100
>>> result
1.17
>>> print(result)
1.17
>>> a=25/5                                   #Now a is perfectly divisible
>>> result = math.floor(a*100)/100
>>> result
5.0
>>> print(result)
5.0
>>> print(f"{result:.2f}")
5.00

Formatting a decimal as percentage

Similar you can represent the ratio as percentage: print(f"{result:.2f} %")

prints:

5.00 %

A formatting shortcut for percentage can be: print(f"{25/100:.2%}") Which converts the result of 25/100 == 0.25 to:

25.00%

Note: The formatting-literal .2% automatically converts from ratio to percentage with 2 digits after the decimal-point and adds the percent-symbol.

Formatting a decimal with specific scale (rounded or truncated ?)

Now the part without rounding-off, just truncation. As example we can use the repeating decimal, e.g. 1/6 which needs to be either rounded or truncated (cut-off) after a fixed number of fractional digits - the scale (in contrast to precision).

>>> print(f"{1/6:.2}")
0.17
>>> print(f"{1/6:.2%}")
16.67%

Note how the formatted string is not truncated (to 0.16) but rounded (to 0.17). Here the scale was specified inside formatting-literal as 2 (after the dot).

See also:

  • Truncate to three decimals in Python
  • How do I interpret precision and scale of a number in a database?
  • What is the difference between precision and scale?

Formatting many decimals in fixed width (leading spaces)

Another example is to print multiple decimals, like in a column as right-aligned, so you can easily compare them.

Then use string-formatting literal 6.2f to add leading spaces (here a fixed-width of 6):

>>> print(f"{result:6.2f}")
  5.00
>>> print(f"{100/25*100:6.2f}")
400.00
>>> print(f"{25/100*100:6.2f}")
 25.00

See also

All the formatting-literals demonstrated here can also be applied using

  • old-style %-formatting (also known as "Modulo string formatting") which was inherited from printf method of C language. Benefit: This way is also compatible with Python before 3.6).
  • new-style .format method on strings (introduced with Python 3)

See theherk's answer which demonstrates those alternatives.

Learn more about string-formatting in Python:

  • Real Python: Python 3's f-Strings: An Improved String Formatting Syntax (Guide)
  • Real Python: Python String Formatting Best Practices


Answered By - hc_dev
Answer Checked By - Timothy Miller (PHPFixing Admin)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing