странная дескриптор python странный и как получить ближайший десятичное число с плавающей запятой? - PullRequest
0 голосов
/ 16 ноября 2018

Странный результат

In [46]: Decimal(1.1).quantize(Decimal('.1'), rounding=ROUND_UP)
Out[46]: Decimal('1.2')

In [47]: Decimal(1.1).quantize(Decimal('.1'), rounding=ROUND_HALF_UP)
Out[47]: Decimal('1.1')

In [48]: Decimal(3.65).quantize(Decimal('.1'), rounding=ROUND_UP)
Out[48]: Decimal('3.7')

In [49]: Decimal(3.65).quantize(Decimal('.1'), rounding=ROUND_HALF_UP)
Out[49]: Decimal('3.6')

Но я хочу это:

In [47]: Decimal(1.1).quantize(Decimal('.1'), rounding=Somthing)
Out[47]: Decimal('1.1')

In [48]: Decimal(3.65).quantize(Decimal('.1'), rounding=Somthing)
Out[48]: Decimal('3.7')

Что означает, что я хочу получить ближайший поплавок.

1 Ответ

0 голосов
/ 16 ноября 2018

Проблема в том, что вы вводите float значения в Decimal, что подвержено ошибкам точности с плавающей запятой. Подача строки устраняет проблему:

print(Decimal(str(1.1)).quantize(Decimal('.1'), rounding=ROUND_UP))

Decimal('1.1')

print(Decimal(str(3.65)).quantize(Decimal('.1'), rounding=ROUND_UP))

Decimal('3.7')

В частности, мы находим:

Decimal(1.1) == Decimal('1.100000000000000088817841970012523233890533447265625')
...