Rumah > pembangunan bahagian belakang > Tutorial Python > Modul matematik di Python: perpuluhan dan pecahan

Modul matematik di Python: perpuluhan dan pecahan

Jennifer Aniston
Lepaskan: 2025-03-09 09:15:14
asal
621 orang telah melayarinya

Mathematical Modules in Python: Decimal and Fractions

Bahkan operasi matematik yang paling asas kadang -kadang dapat menghasilkan hasil yang salah. Ini disebabkan oleh batasan menyimpan nilai -nilai tepat nombor tertentu. Anda boleh mengatasi batasan ini dengan menggunakan modul

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

Tutorial ini akan memperkenalkan kedua -dua modul ini dan fungsi yang berbeza yang mereka sediakan.

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')
Salin selepas log masuk
Salin selepas log masuk
Seperti yang anda lihat, nilai fungsi

menentukan ketepatan pengiraan, peraturan pembulatan, dan kelakuan pengumpulan pengecualian. getcontext()

anda boleh menggunakan fungsi

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

yang boleh digunakan untuk pengiraan:

, 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

Berikut adalah contoh cara menggunakan konteks yang berbeza untuk mendapatkan hasil yang berbeza untuk pembahagian mudah:

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
Salin selepas log masuk
Salin selepas log masuk
Di samping mencatatkan perbezaan dalam algoritma ketepatan dan pembulatan untuk konteks yang berbeza, anda juga boleh memerhatikan bahawa di bawah

, hasil pembahagian untuk 0 adalah ExtendedContext. Infinity

Banyak fungsi dalam decimal

juga menerima objek konteks sebagai parameter untuk melakukan pengiraan mereka. Dengan cara ini, anda boleh mengelakkan sentiasa menetapkan konteks atau nilai ketepatan yang dikira.
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
Salin selepas log masuk
Salin selepas log masuk

menggunakan modul pecahan

fractions Kadang -kadang, anda mungkin menghadapi situasi di mana anda perlu melakukan pelbagai operasi pada skor atau hasil akhir perlu menjadi skor. Modul

boleh membantu dalam kes ini.

Buat skor

Modul fractions Fraction membolehkan anda membuat contoh decimal dari nombor, nombor titik terapung, nombor perpuluhan dan juga rentetan. Seperti modul

, terdapat beberapa masalah dengan modul ini apabila membuat pecahan dari nombor titik terapung. Berikut adalah beberapa contoh:
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)
Salin selepas log masuk

operasi aritmetik pecahan

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')
Salin selepas log masuk
Salin selepas log masuk

fungsi portform dan penyebut

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
Salin selepas log masuk
Salin selepas log masuk

skor dan modul matematik

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
Salin selepas log masuk
Salin selepas log masuk

Ringkasan

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan