Witness pythons supreme silliness printing out time.time()...
$ python3 -c "import time;print(time.time())"
$ python2.5 -c "import time;print(time.time())"
$ python2.6 -c "import time;print(time.time())"
$ python2.6 -c "import time;print(repr(time.time()))"
$ python2.6 -c "import time;import decimal;print(decimal.Decimal(str(time.time())))"
Notice how it truncates the float to only two decimal places?! So silly, and likely the cause of many subtle bugs in programs throughout the land. If you repr it, there are less places cut off (12 for print vs 17 for repr).
The last example shows the real bad part... say you want to use a decimal... python strangely wants your argument to decimal be a str, not a float. Then your float gets truncated by the str() function... and BAM!! POW!.
The problem with pythons decimal.Decimal(1.0) is that it gives you this error message if you pass it a float...
TypeError: Cannot convert float to Decimal. First convert the float to a string
Peoples first response is to do... decimal.Decimal(str(123456789.12345670))... BAM!! POW!... you just truncated your number, and lost precision(and accuracy).
Many pieces of code make this mistake with pythons silly float handling.
Decimals are not as silly as a python float for printing:
$ python2.6 -c "import time;import decimal;print(decimal.Decimal('%23.23f' % time.time()))"
Note the "%23.23f" which says to use up to 23 characters on the left, and up to 23 on the right. So if you want to print, or str() a float... and expect something sensible to show up... don't use print(afloat) or str(afloat) or even repr(afloat)... use that weird syntax instead (with appropriate precision chosen on each side)!
The Cobra language(which Simon wrote about recently) does use Decimals by default - and it has many other elegant features.