Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing Trailing Zeros in Python [duplicate]

I need to find a way to convert the following strings in python:

0.000       => 0 0           => 0 123.45000   => 123.45 0000        => 0 123.4506780 => 123.450678 

and so forth. I tried .rstrip('0').rstrip('.'), but that doesn't work if the input is 0 or 00.

Any ideas? Thanks!

like image 521
Raiders Avatar asked Apr 27 '11 17:04

Raiders


People also ask

How do I get rid of .00 in Python?

Using int() method To remove the decimal from a number, we can use the int() method in Python. The int() method takes the number as an argument and returns the integer by removing the decimal part from it. It can be also used with negative numbers.

How do you remove trailing spaces in Python?

strip() Python String strip() function will remove leading and trailing whitespaces. If you want to remove only leading or trailing spaces, use lstrip() or rstrip() function instead.


1 Answers

Updated Generalized to maintain precision and handle unseen values:

import decimal import random  def format_number(num):     try:         dec = decimal.Decimal(num)     except:         return 'bad'     tup = dec.as_tuple()     delta = len(tup.digits) + tup.exponent     digits = ''.join(str(d) for d in tup.digits)     if delta <= 0:         zeros = abs(tup.exponent) - len(tup.digits)         val = '0.' + ('0'*zeros) + digits     else:         val = digits[:delta] + ('0'*tup.exponent) + '.' + digits[delta:]     val = val.rstrip('0')     if val[-1] == '.':         val = val[:-1]     if tup.sign:         return '-' + val     return val  # test data NUMS = '''     0.0000      0     0           0     123.45000   123.45     0000        0     123.4506780 123.450678     0.1         0.1     0.001       0.001     0.005000    0.005     .1234       0.1234     1.23e1      12.3     -123.456    -123.456     4.98e10     49800000000     4.9815135   4.9815135     4e30        4000000000000000000000000000000     -0.0000000000004 -0.0000000000004     -.4e-12     -0.0000000000004     -0.11112    -0.11112     1.3.4.5     bad     -1.2.3      bad '''  for num, exp in [s.split() for s in NUMS.split('\n') if s]:     res = format_number(num)     print res     assert exp == res 

Output:

0 0 123.45 0 123.450678 0.1 0.001 0.005 0.1234 12.3 -123.456 49800000000 4.9815135 4000000000000000000000000000000 -0.0000000000004 -0.0000000000004 -0.11112 bad bad 
like image 156
samplebias Avatar answered Sep 19 '22 23:09

samplebias