b10hazard - 9 months ago 54

Python Question

I have a long list of Decimals and that I have to adjust by factors of 10, 100, 1000,..... 1000000 depending on certain conditions. When I multiply them there is sometimes a useless trailing zero (though not always) that I want to get rid of. For example...

`from decimal import Decimal`

# outputs 25.0, PROBLEM! I would like it to output 25

print Decimal('2.5') * 10

# outputs 2567.8000, PROBLEM! I would like it to output 2567.8

print Decimal('2.5678') * 1000

Is there a function that tells the decimal object to drop these insignificant zeros? The only way I can think of doing this is to convert to a string and replace them using regular expressions.

Should probably mention that I am using python 2.6.5

EDIT

senderle's fine answer made me realize that I occasionally get a number like 250.0 which when normalized produces 2.5E+2. I guess in these cases I could try to sort them out and convert to a int

Answer

There's probably a better way of doing this, but you could use `.rstrip('0').rstrip('.')`

to achieve the result that you want.

Using your numbers as an example:

```
>>> s = str(Decimal('2.5') * 10)
>>> print s.rstrip('0').rstrip('.') if '.' in s else s
25
>>> s = str(Decimal('2.5678') * 1000)
>>> print s.rstrip('0').rstrip('.') if '.' in s else s
2567.8
```

And here's the fix for the problem that gerrit pointed out in the comments:

```
>>> s = str(Decimal('1500'))
>>> print s.rstrip('0').rstrip('.') if '.' in s else s
1500
```