Làm thế nào để bạn viết số tiền trong python?

Loại

deposit = Decimal['0.93']
decimal_future_value = deposit * [1 + [Decimal['0.0225']]]**Decimal['1000']
decimal_future_value
>>> Decimal['4283508449.711328779924154334']
0 của Python là bước đầu tiên tự nhiên để biểu thị số tiền trong mã. Hầu như tất cả các nền tảng ánh xạ Python đều có độ chính xác kép của IEEE-754

Nhân đôi chứa 53 bit chính xác. Khi máy đang cố gắng biểu diễn phần phân số [phần định trị] của một số đã cho, nó sẽ tìm thấy một chuỗi bit

deposit = Decimal['0.93']
decimal_future_value = deposit * [1 + [Decimal['0.0225']]]**Decimal['1000']
decimal_future_value
>>> Decimal['4283508449.711328779924154334']
1 sao cho tổng

$$ b_1[\frac{1}{2}]^{1} + b_2[\frac{1}{2}]^{2} +. + b_{53}[\frac{1}{2}]^{53} $$

càng gần số càng tốt. Vì vậy, các giá trị như 0. 1 không thể được đại diện chính xác. Bạn có thể tìm thấy ví dụ nổi tiếng này trong các tài liệu Python chính thức

Nó xảy ra bởi vì 0. 1 không chính xác là 1/10

Hãy xem nó có thể cản trở hoạt động tiền tệ như thế nào

Một cửa hàng web bán một mặt hàng với giá 1. 01. Cửa hàng web mua nó từ nhà cung cấp của nó với giá 0. 99 và chủ sở hữu muốn tính doanh thu nếu hàng triệu mặt hàng [một mặt hàng có 18 số 0] được bán

format[[1.01 - 0.99]*1e18, '.2f']
>>>  '20000000000000016.00'

Bạn đã mong đợi số 2 với 16 số không [2 xu doanh thu trên mỗi mặt hàng nhân với 1e18], nhưng có thêm 16 đô la. Sẽ mất rất nhiều thời gian để bán được nhiều mặt hàng như vậy, nhưng dù sao tính toán cũng sai

Ví dụ thực tế hơn

Bạn có một khoản tiền gửi 93 xu trong một ngân hàng với 2. lãi suất 25%. Bạn đã trở lại trong một ngàn năm để rút nó. Đã xảy ra với anh chàng này

Đối với điều đó, bạn cần phải tính toán một giá trị trong tương lai

deposit = 0.93
future_value = deposit * [[1 + [0.0225]]**1000]
future_value
>>> 4283508449.7111807

gần 4. 3 tỷ. Nhưng nó có chính xác không vì chúng ta đang sử dụng float ở đây?

Số thập phân

Nó là một phần của thư viện chuẩn và cung cấp biểu diễn các số thực. Tính toán doanh thu của cửa hàng trực tuyến hiện đã chính xác

from decimal import Decimal
sell_price = Decimal['1.01']
buy_price = Decimal['0.99']
items_sold = Decimal['1e18']
profit = [sell_price - buy_price] * items_sold
profit
>>> Decimal['2E+16']

Và cho giá trị tương lai

deposit = Decimal['0.93']
decimal_future_value = deposit * [1 + [Decimal['0.0225']]]**Decimal['1000']
decimal_future_value
>>> Decimal['4283508449.711328779924154334']

Sự khác biệt với float trong trường hợp đó là khá nhỏ - chữ số thứ 4 sau dấu thập phân. Nhưng nó vẫn hiện diện

Hiệu suất

Float cũng xuất hiện nhanh hơn Decimal

In [2]: def float_order[item_price, item_count]:
   ...:     return sum[[item_price for _ in range[item_count]]]
   ...:

In [3]: def decimal_order[item_price, item_count]:
   ...:     decimal_item_price = Decimal[item_price]
   ...:     return sum[[decimal_item_price for _ in range[item_count]]]
   ...:

In [4]: %timeit float_order[1.01, 10000]
297 µs ± 11.6 µs per loop [mean ± std. dev. of 7 runs, 1000 loops each]

In [5]: from decimal import Decimal

In [6]: %timeit decimal_order['1.01', 10000]
783 µs ± 19.7 µs per loop [mean ± std. dev. of 7 runs, 1000 loops each]

Bạn đã bao giờ gặp vấn đề khi làm việc với các giá trị tiền tệ được đại diện bởi

deposit = Decimal['0.93']
decimal_future_value = deposit * [1 + [Decimal['0.0225']]]**Decimal['1000']
decimal_future_value
>>> Decimal['4283508449.711328779924154334']
0 chưa?

Phải định dạng thủ công một số dưới dạng chuỗi tiền tệ có thể là một quá trình tẻ nhạt. Bạn có thể chỉ cần thực hiện một vài dòng sửa đổi, tuy nhiên, khi chúng tôi cần thực hiện một số chuyển đổi hợp lý, nó sẽ trở nên rất tẻ nhạt

Bước đầu tiên để tự động hóa các loại nhiệm vụ này sẽ yêu cầu một chức năng. Trong bài viết này, chúng ta sẽ xem xét một số phương pháp bạn có thể sử dụng để định dạng số dưới dạng chuỗi tiền tệ trong Python

Phương pháp định dạng số

Chúng ta sẽ xem qua ba thư viện và hàm thay thế cho phép chúng ta chuyển đổi số thành chuỗi tiền tệ

  • Mô-đun bản địa
  • mô-đun Babel
  • Hàm
    en_GB
    af_ZA
    sq_AL
    gsw_FR
    am_ET
    ar_SA
    ar_IQ
    ar_EG
    ar_LY
    ar_DZ
    ...
    
    1

Tuy nhiên, mô-đun

en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
2 đã được bao gồm trong Python, chúng tôi sẽ phải cài đặt Babel để sử dụng nó

Định dạng số dưới dạng chuỗi tiền tệ với ngôn ngữ

Mô-đun

en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
2 đã được cài đặt sẵn với phiên bản Python của bạn

Gói này cho phép các nhà phát triển bản địa hóa các ứng dụng của họ. Có nghĩa là họ không cần biết phần mềm của họ sẽ chạy ở khu vực nào, họ chỉ cần viết một cơ sở mã chung sẽ tự động thay đổi tùy thuộc vào khu vực sử dụng

Đang khởi tạo miền địa phương

Để bắt đầu sử dụng mô-đun

en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
2, trước tiên bạn cần đặt ngôn ngữ

Đoạn mã trên sẽ tạo ra đầu ra sau

English_United States.1252
en_GB

Để có danh sách các ngôn ngữ khả dụng, bạn có thể tra cứu nó trên MS-LCID. Ngoài ra, bạn có thể in nó ra

Chạy bất kỳ biến thể nào ở trên sẽ mang lại kết quả tương tự như

en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...

Định dạng số bằng ngôn ngữ

Với bộ ngôn ngữ ưa thích của bạn, bạn có thể dễ dàng định dạng chuỗi số

Chạy đoạn mã trên, chúng tôi nhận được đầu ra sau

deposit = 0.93
future_value = deposit * [[1 + [0.0225]]**1000]
future_value
>>> 4283508449.7111807
1

Sử dụng str. phương thức định dạng[]

Phương pháp tiếp theo chúng ta sẽ đề cập là phương pháp

en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
1, phương pháp này có ưu điểm là phương pháp đơn giản nhất

Chạy đoạn mã trên, chúng tôi nhận được đầu ra sau

deposit = 0.93
future_value = deposit * [[1 + [0.0225]]**1000]
future_value
>>> 4283508449.7111807
3

Mặc dù vậy, cách tiếp cận này được mã hóa cứng, không giống như cách trước đó, bạn có thể sử dụng cách này để bản địa hóa định dạng một cách linh hoạt

Định dạng số dưới dạng chuỗi tiền tệ với Babel

Sử dụng Babel có lẽ là một trong những phương pháp ít được biết đến hơn, tuy nhiên nó rất thân thiện và trực quan. Nó đi kèm với định dạng số và tiền tệ cũng như các tác vụ quốc tế hóa khác

Không giống như mô-đun

en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
2 của Python, bạn không phải lo lắng về việc điều chỉnh trên quy mô toàn cầu

Để cài đặt

en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
7 qua
en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
8, hãy chạy lệnh sau

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

deposit = 0.93
future_value = deposit * [[1 + [0.0225]]**1000]
future_value
>>> 4283508449.7111807
7

Sau khi cài đặt, để đạt được kết quả tương tự như hai phương pháp khác được liệt kê ở trên, bạn chỉ cần gọi

en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
9 trên một chuỗi

Chạy đoạn mã trên, chúng tôi nhận được đầu ra sau

deposit = 0.93
future_value = deposit * [[1 + [0.0225]]**1000]
future_value
>>> 4283508449.7111807
9

Để có được danh sách đầy đủ các ngôn ngữ có sẵn

from decimal import Decimal
sell_price = Decimal['1.01']
buy_price = Decimal['0.99']
items_sold = Decimal['1e18']
profit = [sell_price - buy_price] * items_sold
profit
>>> Decimal['2E+16']
0

Trông giống như thế này

from decimal import Decimal
sell_price = Decimal['1.01']
buy_price = Decimal['0.99']
items_sold = Decimal['1e18']
profit = [sell_price - buy_price] * items_sold
profit
>>> Decimal['2E+16']
1

Tìm kiếm các số trong chuỗi và định dạng dưới dạng tiền tệ

Đôi khi, bạn không làm việc với đầu vào số trực tiếp, chẳng hạn như đầu vào từ người dùng. Bạn có thể đang làm việc với một câu hoặc một kho văn bản lớn hơn, ô uế. Chúng ta có thể sử dụng mô-đun

deposit = 0.93
future_value = deposit * [[1 + [0.0225]]**1000]
future_value
>>> 4283508449.7111807
10 để lọc qua các loại đầu vào khác nhau, tìm các giá trị số và định dạng chúng

Hãy sử dụng cả ba cách tiếp cận trên để định dạng đơn vị tiền tệ trong câu

from decimal import Decimal
sell_price = Decimal['1.01']
buy_price = Decimal['0.99']
items_sold = Decimal['1e18']
profit = [sell_price - buy_price] * items_sold
profit
>>> Decimal['2E+16']
3

Tiếp theo, chúng tôi đưa ra mẫu regex cần thiết để khớp với các chuỗi số

Tiếp theo, chúng ta áp dụng ba phương thức đã học cho biến chuỗi

deposit = 0.93
future_value = deposit * [[1 + [0.0225]]**1000]
future_value
>>> 4283508449.7111807
11

Hãy so sánh đầu ra ban đầu với đầu ra nhận được từ cả ba phương pháp

from decimal import Decimal
sell_price = Decimal['1.01']
buy_price = Decimal['0.99']
items_sold = Decimal['1e18']
profit = [sell_price - buy_price] * items_sold
profit
>>> Decimal['2E+16']
5
en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
0

Tùy thuộc vào phương pháp bạn thích, độ dài của tập lệnh này có thể được giảm bớt. Có những hạn chế nhất định như bạn có thể nhận thấy

Tập lệnh không thể phân biệt giữa các chuỗi số bạn muốn định dạng. Tuy nhiên, nó có thể được thay đổi dễ dàng tùy thuộc vào nhu cầu và trường hợp sử dụng của bạn

Phần kết luận

Trong bài viết này, chúng tôi đã xem xét một số cách chuyển đổi số thành chuỗi tiền tệ thích hợp. Chúng tôi đã đề cập đến phương pháp

en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
1, cũng như các mô-đun
en_GB
af_ZA
sq_AL
gsw_FR
am_ET
ar_SA
ar_IQ
ar_EG
ar_LY
ar_DZ
...
2 và
deposit = 0.93
future_value = deposit * [[1 + [0.0225]]**1000]
future_value
>>> 4283508449.7111807
14

Cuối cùng, chúng tôi đã kết hợp các phương thức này với mô-đun biểu thức chính quy của Python để đạt được phạm vi sử dụng rộng hơn. Cuối cùng, tôi hy vọng bạn có thể học được điều gì đó mới từ tất cả những điều này có thể giúp bạn tiết kiệm thời gian

Ký hiệu đô la trong Python là gì?

Ký hiệu đô la đó có nghĩa là. chúng tôi đang ở trong vỏ hệ thống, tôi. e chương trình mà bạn cài đặt ngay khi mở ứng dụng Terminal. Ký hiệu đô la là thường là ký hiệu được sử dụng để biểu thị nơi bạn có thể bắt đầu nhập lệnh [bạn sẽ thấy con trỏ nhấp nháy ở đó].

Ký hiệu đô la có được phép trong Python không?

ký hiệu đô la ['$'] là ký tự không hợp lệ . lớp là một từ khóa Python với cú pháp đặc biệt của nó. Nó không thể được sử dụng một tên biến. Tên không được chứa khoảng trắng Nói cách khác, ký tự khoảng trắng [' '] là bất hợp pháp trong tên, giống như '$' là.

Chủ Đề