对于十进制浮点算术,python提供了十进制模块。该模块本身具有数百个功能,可帮助有效处理十进制计算。我们将研究有关此主题的重要且使用最广泛的主题。
此函数比较十进制数字。如果1st Decimal参数大于2nd,则返回1;如果1st Decimal参数小于2nd,则返回-1;如果两者相等,则返回0。
import decimal val1 = decimal.Decimal(2.6) val2 = decimal.Decimal(2.61) # compare decimals print("The result is : ",val1.compare(val2)) # resetting the values val1 = decimal.Decimal(2.6) val2 = decimal.Decimal(-2.6) # compare decimals print("The result is : ",val1.compare(val2)) # resetting the values val1 = decimal.Decimal(2.6) val2 = decimal.Decimal(2.6) # compare decimals print("The result is : ",val1.compare(val2))
运行上面的代码给我们以下结果-
The result is : -1 The result is : 1 The result is : 0
min()
他们分别找到两个十进制数的最大值和最小值。
import decimal val1 = decimal.Decimal(2.6) val2 = decimal.Decimal(2.61) # compare decimals print("The max value is : ",round(val1.max(val2),2)) print("The min value is : ",round(val1.min(val2),2))
运行上面的代码给我们以下结果-
The max value is : 2.61 The min value is : 2.60
通过使用此方法,我们可以更改算术运算的精度。默认精度为28。在下面的示例中,我们执行算术运算,该运算根据getcontext()
.prec设置的精度显示结果。
from decimal import * print(Decimal(13) / Decimal(7)) getcontext().prec = 6 print(Decimal(13) / Decimal(7)) getcontext().prec = 10 print(Decimal(13) / Decimal(7))
运行上面的代码给我们以下结果-
1.857142857142857142857142857 1.85714 1.857142857
返回给定数字的(自然)指数函数e ** x的值。
from decimal import * #Finding e print(Decimal(1).exp()) #Finding e raised to 2 print(Decimal(2).exp()) #Finding e raised to 4 print(Decimal(4).exp())
运行上面的代码给我们以下结果-
2.718281828459045235360287471 7.389056098930650227230427461 54.59815003314423907811026120
有时我们需要整数,这些整数的除法为我们处理的小数。我们可以使用as_integer_ratio()来获得。
from decimal import * v = Decimal('2.1834').as_integer_ratio() print(v) v = Decimal('-1.92').as_integer_ratio() print(v)
运行上面的代码给我们以下结果-
(10917, 5000) (-48, 25)
我们可以使用这些函数来计算自然对数(底数为e)以及底数为10的对数。我们提供需要对数的十进制值。
from decimal import * ln_val = Decimal('2.1').ln() print(ln_val) log_val = Decimal('2.1').log10() print(log_val)
运行上面的代码给我们以下结果-
0.7419373447293773124826065257 0.3222192947339192680072441618
这是一个特殊功能,称为融合乘法和加法。提供的小数乘以第一个参数a,然后将结果添加到第二个参数b。
from decimal import * # Same as (2.1*2)+5 fma_val = Decimal(2.1).fma(2,5) print(fma_val) # Same as (8.1*3)+5 fma_val = Decimal(8.1).fma(3,5) print(fma_val) re class="prettyprint notranslate" >
运行上面的代码给我们以下结果-
9.200000000000000177635683940 29.29999999999999893418589636