dalam python. Begitu juga, modul decimal
dan math
yang kami pelajari dalam tutorial sebelumnya akan membantu kami melakukan operasi aritmetik berasaskan pecahan. Walau bagaimanapun, modul cmath
dalam python berlaku untuk berbuat demikian. fractions
menggunakan modul perpuluhan
from decimal import Decimal Decimal(121) # 返回 Decimal('121') Decimal(0.05) # 返回 Decimal('0.05000000000000000277555756') Decimal('0.05') # 返回 Decimal('0.05') Decimal((0, (8, 3, 2, 4), -3)) # 返回 Decimal('8.324') Decimal((1, (8, 3, 2, 4), -1)) # 返回 Decimal('-832.4')
menentukan ketepatan pengiraan, peraturan pembulatan, dan kelakuan pengumpulan pengecualian. getcontext()
untuk mendapatkan dan menetapkan konteks semasa pengiraan. Gunakan pernyataan setcontext()
untuk mengubah konteks pengiraan buat sementara waktu. with
Terdapat tiga konteks terbina dalam dalam modul
, ROUND_HALF_UP
dan ROUND_HALF_EVEN
sebagai algoritma pembulatan mereka. Satu lagi perbezaan antara konteks ini adalah tingkah laku yang mendorong pengecualian. ROUND_HALF_EVEN
Tiada pengecualian yang berkaitan dengan limpahan berangka, operasi tidak sah, dan pembahagian oleh sifar dinaikkan. DefaultContext
membolehkan hampir semua pengecualian, yang bagus untuk debugging, manakala BasicContext
digunakan sebagai konteks lalai untuk pengiraan. DefaultContext
import decimal from decimal import ROUND_DOWN, ROUND_UP, Decimal as D dec_a = D('0.153') dec_b = D('0.231') zero = D('0') print("无上下文(使用默认值): ", dec_a/dec_b) # 无上下文(使用默认值): 0.6623376623376623376623376623 decimal.setcontext(decimal.BasicContext) print("基本上下文: ", dec_a/dec_b) # 基本上下文: 0.662337662 decimal.setcontext(decimal.ExtendedContext) print("扩展上下文: ", dec_a/dec_b) # 扩展上下文: 0.662337662 print("扩展上下文: ", dec_b/zero) # 扩展上下文: Infinity decimal.setcontext(decimal.DefaultContext) print("默认上下文: ", dec_a/dec_b) # 默认上下文: 0.6623376623376623376623376623 with decimal.localcontext() as l_ctx: l_ctx.prec = 5 l_ctx.rounding = ROUND_UP print("局部上下文: ", dec_a/dec_b) # 局部上下文: 0.66234
, hasil pembahagian untuk 0 adalah ExtendedContext
. Infinity
Banyak fungsi dalam decimal
import decimal from decimal import Decimal as D print(D('22').sqrt(decimal.BasicContext)) # 4.69041576 print(D('22').sqrt(decimal.ExtendedContext)) # 4.69041576 print(D('22').sqrt(decimal.DefaultContext)) # 4.690415759823429554565630114 with decimal.localcontext() as l_ctx: l_ctx.prec = 5 print(D('22').sqrt(l_ctx)) # 4.6904
fractions
Kadang -kadang, anda mungkin menghadapi situasi di mana anda perlu melakukan pelbagai operasi pada skor atau hasil akhir perlu menjadi skor. Modul
Modul fractions
Fraction
membolehkan anda membuat contoh decimal
dari nombor, nombor titik terapung, nombor perpuluhan dan juga rentetan. Seperti modul
from fractions import Fraction from decimal import Decimal Fraction(11, 35) # 返回 Fraction(11, 35) Fraction(10, 18) # 返回 Fraction(5, 9) Fraction('8/25') # 返回 Fraction(8, 25) Fraction(1.13) # 返回 Fraction(1272266894732165, 1125899906842624) Fraction('1.13') # 返回 Fraction(113, 100) Fraction(Decimal('1.13')) # 返回 Fraction(113, 100)
Anda juga boleh melakukan operasi matematik mudah pada pecahan seperti nombor normal, seperti penambahan dan penolakan.
from decimal import Decimal Decimal(121) # 返回 Decimal('121') Decimal(0.05) # 返回 Decimal('0.05000000000000000277555756') Decimal('0.05') # 返回 Decimal('0.05') Decimal((0, (8, 3, 2, 4), -3)) # 返回 Decimal('8.324') Decimal((1, (8, 3, 2, 4), -1)) # 返回 Decimal('-832.4')
Modul ini juga mempunyai beberapa kaedah penting, seperti limit_denominator(max_denominator)
, yang akan menemui dan mengembalikan pecahan yang paling dekat dengan pecahan nilai yang diberikan, dengan penyebut paling banyak max_denominator
. Anda juga boleh menggunakan atribut numerator
untuk mengembalikan pengangka pecahan yang diberikan (dilambangkan sebagai istilah terendah) dan atribut denominator
untuk mengembalikan penyebut.
import decimal from decimal import ROUND_DOWN, ROUND_UP, Decimal as D dec_a = D('0.153') dec_b = D('0.231') zero = D('0') print("无上下文(使用默认值): ", dec_a/dec_b) # 无上下文(使用默认值): 0.6623376623376623376623376623 decimal.setcontext(decimal.BasicContext) print("基本上下文: ", dec_a/dec_b) # 基本上下文: 0.662337662 decimal.setcontext(decimal.ExtendedContext) print("扩展上下文: ", dec_a/dec_b) # 扩展上下文: 0.662337662 print("扩展上下文: ", dec_b/zero) # 扩展上下文: Infinity decimal.setcontext(decimal.DefaultContext) print("默认上下文: ", dec_a/dec_b) # 默认上下文: 0.6623376623376623376623376623 with decimal.localcontext() as l_ctx: l_ctx.prec = 5 l_ctx.rounding = ROUND_UP print("局部上下文: ", dec_a/dec_b) # 局部上下文: 0.66234
Anda juga boleh menggunakan modul ini dengan pelbagai fungsi dalam modul math
untuk melakukan pengiraan berasaskan pecahan.
import decimal from decimal import Decimal as D print(D('22').sqrt(decimal.BasicContext)) # 4.69041576 print(D('22').sqrt(decimal.ExtendedContext)) # 4.69041576 print(D('22').sqrt(decimal.DefaultContext)) # 4.690415759823429554565630114 with decimal.localcontext() as l_ctx: l_ctx.prec = 5 print(D('22').sqrt(l_ctx)) # 4.6904
Kedua -dua modul ini cukup untuk membantu anda melakukan operasi biasa pada nombor perpuluhan dan pecahan. Seperti yang ditunjukkan dalam bahagian terakhir, anda boleh menggunakan modul ini dengan modul math
untuk mengira nilai pelbagai fungsi matematik dalam format yang anda inginkan.
Dalam tutorial seterusnya dalam siri ini, anda akan mempelajari modul random
di Python.
Atas ialah kandungan terperinci Modul matematik di Python: perpuluhan dan pecahan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!