On Thu, Mar 5, 2020 at 4:27 AM Steve Barnes <gadgetst...@live.co.uk> wrote:
> One of the lovely things about Python is that we have the capability to > avoid issues such as the vagaries of the floating point type with libraries > such as decimal and fractions. This is wonderous to me but comes with an > issue that I suspect is limiting its usage. That issue is that you have to > litter your code with constructors of those types, e.g. > > > > ``` > > a = 0.1 > > b = 0.2 > > c = 0.3 > > a + b == c # This doesn’t work but it is easy to forget why > > ``` > > vs: > > ``` > > from decimal import * # I know why this is bad but it comes straight from > the examples > > a = Decimal("0.1") # Needs to be a string to avoid being temporarily a > float > > b = Decimal("0.2") # Ditto > > c = Decimal("0.3") # Ditto > > a + b == c # Magic this works! > > ``` > > > > While this works it is not very friendly to users and there will often be > cases where people forget to quote the values, etc. and there are similar > issues with using the fractions library and I am sure with others. I > suspect that this is why the decimals library, and some others, is not used > as widely as it possibly should be. > > > > Wouldn’t it be possible to have something along the lines of: > > > > ``` > > from decimal import TreatFloatsAsDecimal > > @TreatFloatsAsDecimal > > a = 0.1 # These are all now decimals > > b = 0.2 > > c = 0.3 > > a + b == c # This now works > > `` > > If you were going to do this you would probably need something like a context manager to control the scope, such as: with TreatFloatsAsDecimal: a = 0.1 # decimal b = 0.2 # decimal c = 0.3 # decimal d = 0.3 # float I have been interested in something like this in the context of numpy arrays, but I am not sure even that would even be possible under how the python language works, and if it was I figured it was too complicated to be worthwhile.
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/H346THCDRRIGRIAQUVVU2PHRVH6T5VSP/ Code of Conduct: http://python.org/psf/codeofconduct/