正确处理货币。
项目描述
正确处理货币
在大多数国际化支付系统中,金额用整数表示,而不是小数,就像在较小的货币单位(可能的最小单位)中表示的那样。
对于EUR来说,是分,它是单个欧元的1/100。对于MRU来说,是库姆,它是单个乌吉亚的1/5。
货币列表是从流通货币列表维基页面使用wikitable2csv获得的单个CSV转储生成的。
先决条件
核心包需要Python 3.6、3.7、3.8或3.9。
Django集成包(valuta.contrib.django_integration)需要Django 2.2、3.0、3.1或3.2。
SQLAlchemy集成包(valuta.contrib.sqlalchemy_integration)与SQLAlchemy 1.4.x进行了测试。
文档
文档可在Read the Docs上找到。
安装
PyPI上的最新稳定版本
pip install valuta
或GitHub上的开发版本
pip install https://github.com/barseghyanartur/valuta/archive/master.tar.gz
用法示例
纯Python
直接使用货币类
如果您需要数字进行进一步计算
import valuta
valuta.EUR.convert_to_currency_units(1_000)
# 10.0
valuta.UGX.convert_to_currency_units(1_000)
# 1000.0
valuta.MRU.convert_to_currency_units(1_000)
# 200.0
valuta.VND.convert_to_currency_units(1_000)
# 100.0
valuta.TND.convert_to_currency_units(1_000)
# 1.0
valuta.JPY.convert_to_currency_units(1_000)
# 10.0
如果您需要显示值并返回一个漂亮的字符串
import valuta
valuta.EUR.display_in_currency_units(1_000)
# '€10.00'
valuta.UGX.display_in_currency_units(1_000)
# 'UGX1,000'
valuta.MRU.display_in_currency_units(1_000)
# 'MRU200.00'
valuta.VND.display_in_currency_units(1_000)
# '₫100'
valuta.TND.display_in_currency_units(1_000)
# 'TND1.000'
valuta.JPY.display_in_currency_units(1_000)
# '¥10'
自定义字符串格式化
根据给定货币的具体情况,显示的数字可能有或没有小数点。
display_in_currency_units方法接受可选的format、locale和decimal_quantization参数。最常见的format值列在valuta.constants中。
格式
DISPLAY_FORMAT_NUMBER
示例值:'10000'或'10000.00'。
DISPLAY_FORMAT_HUMAN_READABLE
显示可读性高的数字。
示例值:'10,000'或'10,000.00'。
DISPLAY_FORMAT_HUMAN_READABLE_WITH_CURRENCY_CODE
显示带货币代码的可读性高的数字。
示例值:'JPY 10,000'或'EUR 10,000.00'。
DISPLAY_FORMAT_HUMAN_READABLE_WITH_CURRENCY_SYMBOL
显示带货币符号的可读性高的数字。
示例值:'¥ 10,000'或'€ 10,000.00'。
一些示例
from valuta.constants import *
valuta.JPY.display_in_currency_units(
1_000_000,
format=DISPLAY_FORMAT_HUMAN_READABLE
)
# '10,000'
valuta.JPY.display_in_currency_units(
1_000_000,
format=DISPLAY_FORMAT_HUMAN_READABLE_WITH_CURRENCY_CODE
)
# 'JPY 10,000'
valuta.JPY.display_in_currency_units(
1_000_000,
format=DISPLAY_FORMAT_HUMAN_READABLE_WITH_CURRENCY_SYMBOL
)
# '¥ 10,000'
valuta.EUR.display_in_currency_units(
1_000_000,
format=DISPLAY_FORMAT_HUMAN_READABLE
)
# '10,000.00'
valuta.EUR.display_in_currency_units(
1_000_000,
format=DISPLAY_FORMAT_HUMAN_READABLE_WITH_CURRENCY_CODE
)
# 'EUR 10,000.00'
valuta.EUR.display_in_currency_units(
1_000_000,
format=DISPLAY_FORMAT_HUMAN_READABLE_WITH_CURRENCY_SYMBOL
)
# '€ 10,000.00'
区域设置
valuta.JPY.display_in_currency_units(1_000_000_000, locale="nl_NL")
# 'JP¥\xa010.000.000'
valuta.JPY.display_in_currency_units(1_000_000_000, locale="en_US")
# '¥10,000,000'
valuta.EUR.display_in_currency_units(1_000_000_000, locale="nl_NL")
# '€\xa010.000.000,00'
valuta.EUR.display_in_currency_units(1_000_000_000, locale="en_US")
# '€10,000,000.00'
valuta.AMD.display_in_currency_units(1_000_000_000, locale="en_US")
# 'AMD10,000,000.00'
valuta.AMD.display_in_currency_units(1_000_000_000, locale="hy_AM")
# '10 000 000,00 ֏'
处理(ISO-4217)货币代码的字符串表示
如果您需要数字进行进一步计算
from valuta.shortcuts import convert_to_currency_units
convert_to_currency_units("EUR", 1_000)
# 10.0
convert_to_currency_units("UGX", 1_000)
# 1000.0
convert_to_currency_units("MRU", 1_000)
# 200.0
convert_to_currency_units("VND", 1_000)
# 100.0
convert_to_currency_units("TND", 1_000)
# 1.0
convert_to_currency_units("JPY", 1_000)
# 10.0
如果您需要显示值并返回一个漂亮的字符串
from valuta.shortcuts import display_in_currency_units
display_in_currency_units("EUR", 1_000)
# '€10.00'
display_in_currency_units("UGX", 1_000)
# 'UGX1,000'
display_in_currency_units("MRU", 1_000)
# 'MRU200.00'
display_in_currency_units("VND", 1_000)
# '₫100'
display_in_currency_units("TND", 1_000)
# 'TND1.000'
display_in_currency_units("JPY", 1_000)
# '¥10'
默认情况下,由于无效的货币代码而引发的异常将被抑制(在无效的货币代码上返回None)。
如果您想在无效的货币代码上抛出异常,将fail_silently设置为False。以下示例将抛出valuta.exceptions.InvalidCurrency异常。
convert_to_currency_units("i-dont-exist", 1_000, fail_silently=False)
display_in_currency_units快捷函数也接受可选的format参数。
Django集成
在其基础上,Django集成包是一个表示货币ISO-4217代码的CurrencyField。如果绑定到某些数字字段(SmallIntegerField、IntegerField、BigIntegerField),这些字段包含较小货币单位中的金额,它将为模型类添加(魔法)方法,用于将字段金额转换为(主要)货币单位(通常简称为货币单位)。
还有模板标签和过滤器,当您需要在模板中渲染非模型数据(例如,JSON)而无需预先处理时使用。
模型字段
模型定义
示例模型
product/models.py
from django.db import models
from valuta.contrib.django_integration.models import CurrencyField
class Product(models.Model):
name = models.CharField(max_length=255)
price = models.IntegerField() # Amount in minor currency units
price_with_tax = models.IntegerField() # Amount in minor currency units
currency = CurrencyField(amount_fields=["price", "price_with_tax"])
示例数据
import valuta
from product.models import Product
product = Product.objects.create(
name="My test product",
price=100,
price_with_tax=120,
currency=valuta.AMD.uid,
)
使用魔法方法进行金额转换
然后您可以如下引用price和price_with_tax
product.price_in_currency_units()
# 1.0
product.price_with_tax_in_currency_units()
# 1.2
注意,在amount_fields中列出的每个字段都获得一个相应的模型方法,后缀为_in_currency_units,用于将字段金额转换为(主要)货币单位。
使用魔法方法进行显示金额的转换
然后您可以如下引用price和price_with_tax
product.price_display_in_currency_units()
# 'AMD1.00'
product.price_with_tax_display_in_currency_units()
# 'AMD1.20'
注意,在amount_fields中列出的每个字段都获得一个相应的模型方法,后缀为_display_in_currency_units,用于将字段金额转换为(主要)货币单位。
魔法方法也接受可选的format参数。
product = Product.objects.create(
name="My test product",
price=100_000,
price_with_tax=120_000,
currency=valuta.EUR.uid,
)
product.price_display_in_currency_units(
format=DISPLAY_FORMAT_HUMAN_READABLE_WITH_CURRENCY_SYMBOL
)
# '€ 1,000.00'
product.price_with_tax_display_in_currency_units(
format=DISPLAY_FORMAT_HUMAN_READABLE_WITH_CURRENCY_CODE
)
# 'EUR 1,200.00'
结合 格式 和 区域 参数。
product.price_display_in_currency_units(
format=DISPLAY_FORMAT_HUMAN_READABLE_WITH_CURRENCY_SYMBOL,
locale="nl_NL"
)
# '€ 1.000,00'
product.price_with_tax_display_in_currency_units(
format=DISPLAY_FORMAT_HUMAN_READABLE_WITH_CURRENCY_CODE,
locale="nl_NL"
)
# 'EUR 1.200,00'
限制货币选择
在字段级别
您可以按以下方式限制货币选择
currency = CurrencyField(
amount_fields=["price", "price_with_tax"],
limit_choices_to=[valuta.AMD.uid, valuta.EUR.uid],
)
全局
您还可以在 Django 设置中覆盖 CurrencyField 的选择
settings.py
VALUTA_FIELD_LIMIT_CHOICES_TO=(
valuta.AMD.uid,
valuta.EUR.uid,
)
转换转换的值
如果您想显式地将结果值转换为特定类型,请为 CurrencyField 提供一个可调用的 cast_to。
对于 int,将是
currency = CurrencyField(
amount_fields=("price", "price_with_tax",),
cast_to=int,
)
对于 float,将是
currency = CurrencyField(
amount_fields=("price", "price_with_tax",),
cast_to=float,
)
对于 decimal.Decimal,将是
currency = CurrencyField(
amount_fields=("price", "price_with_tax",),
cast_to=lambda __v: Decimal(str(__v)),
)
自定义选择显示格式
默认情况下,使用以下格式(valuta.utils.get_currency_choices_with_code)
[
("AMD", "Armenian Dram (AMD)"),
("EUR", "Euro (EUR)"),
]
如果您想自定义它,请提供可调用的 get_choices_func。
from valuta.utils import get_currency_choices
currency = CurrencyField(
amount_fields=("price", "price_with_tax",),
get_choices_func=get_currency_choices,
)
然后它将具有以下格式
[
("AMD", "Armenian Dram"),
("EUR", "Euro"),
]
以下列出了如何自定义的一个很好的例子:将 valuta.utils.get_currency_choices 和 valuta.utils.get_currency_choices_with_code 作为自定义示例。例如,您可以这样做
import operator
from typing import List, Tuple, Set, Union
from babel.numbers import get_currency_symbol
from valuta.base import Registry
def get_currency_choices_with_sign(
limit_choices_to: Union[Tuple[str, ...], List[str], Set[str]] = None,
sort_by_key: bool = False,
) -> List[Tuple[str, str]]:
"""Get currency choices with code.
List of choices in the following format::
[
("AMD", "AMD - Armenian Dram"),
("EUR", "€ - Euro"),
("USD", "$ - US Dollar"),
]
"""
if limit_choices_to is None:
values = [
(__key, f"{get_currency_symbol(__key)} - {__value.name}")
for __key, __value in Registry.REGISTRY.items()
]
else:
values = [
(__key, f"{get_currency_symbol(__key)} - {__value.name}")
for __key, __value in Registry.REGISTRY.items()
if __key in limit_choices_to
]
if sort_by_key:
values.sort(key=operator.itemgetter(0))
else:
values.sort(key=operator.itemgetter(1))
return values
然后按照以下方式使用它
currency = CurrencyField(
amount_fields=("price", "price_with_tax",),
get_choices_func=get_currency_choices_with_sign,
)
SQLAlchemy 集成
与 Django 集成包类似,SQLAlchemy 集成包是一个简单的 CurrencyType,表示货币的 ISO-4217 代码。
尚未实现任何魔术方法(尽管计划实现)。您得到的是一个简单的 SQLAlchemy 类型来存储数据。对于其余部分,您必须使用 valuta.shortcuts。
请参阅 sqlalchemy-integration/examples/sqlalchemy_example/valuta_admin/models.py <https://github.com/barseghyanartur/valuta/blob/feature/sqlalchemy-integration/examples/sqlalchemy_example/valuta_admin/models.py#L50> 作为良好的示例。
模型定义
示例模型
product/models.py
from valuta.contrib.sqlalchemy_integration.types import CurrencyType
from . import db # Standard SQLAlchemy way
class Product(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(64), unique=True)
price = db.Column(db.Integer())
price_with_tax = db.Column(db.Integer())
currency = db.Column(CurrencyType())
示例数据
import valuta
from product.models import Product
product = Product(
name="My test product",
price=100,
price_with_tax=120,
currency=valuta.AMD.uid,
)
支持的货币
带有 (*) 标记的货币是自定义的(手动添加)。其余的是从已提到的 流通货币列表 中获得的。
┌───────────┬──────────────────────────────────────────┐
│ ISO code │ Currency │
├───────────┼──────────────────────────────────────────┤
│ AED │ United Arab Emirates Dirham │
├───────────┼──────────────────────────────────────────┤
│ AFN │ Afghan Afghani │
├───────────┼──────────────────────────────────────────┤
│ ALL │ Albanian Lek │
├───────────┼──────────────────────────────────────────┤
│ AMD │ Armenian Dram │
├───────────┼──────────────────────────────────────────┤
│ ANG │ Netherlands Antillean Guilder │
├───────────┼──────────────────────────────────────────┤
│ AOA │ Angolan Kwanza │
├───────────┼──────────────────────────────────────────┤
│ ARS │ Argentine Peso │
├───────────┼──────────────────────────────────────────┤
│ AUD │ Australian Dollar │
├───────────┼──────────────────────────────────────────┤
│ AWG │ Aruban Florin │
├───────────┼──────────────────────────────────────────┤
│ AZN │ Azerbaijani Manat │
├───────────┼──────────────────────────────────────────┤
│ BAM │ Bosnia-Herzegovina Convertible Mark │
├───────────┼──────────────────────────────────────────┤
│ BBD │ Barbadian Dollar │
├───────────┼──────────────────────────────────────────┤
│ BDT │ Bangladeshi Taka │
├───────────┼──────────────────────────────────────────┤
│ BGN │ Bulgarian Lev │
├───────────┼──────────────────────────────────────────┤
│ BHD │ Bahraini Dinar │
├───────────┼──────────────────────────────────────────┤
│ BIF │ Burundian Franc │
├───────────┼──────────────────────────────────────────┤
│ BMD │ Bermudan Dollar │
├───────────┼──────────────────────────────────────────┤
│ BND │ Brunei Dollar │
├───────────┼──────────────────────────────────────────┤
│ BOB │ Bolivian Boliviano │
├───────────┼──────────────────────────────────────────┤
│ BRL │ Brazilian Real │
├───────────┼──────────────────────────────────────────┤
│ BSD │ Bahamian Dollar │
├───────────┼──────────────────────────────────────────┤
│ BTC │ Bitcoin (*) │
├───────────┼──────────────────────────────────────────┤
│ BTN │ Bhutanese Ngultrum │
├───────────┼──────────────────────────────────────────┤
│ BWP │ Botswanan Pula │
├───────────┼──────────────────────────────────────────┤
│ BYN │ Belarusian Ruble │
├───────────┼──────────────────────────────────────────┤
│ BZD │ Belize Dollar │
├───────────┼──────────────────────────────────────────┤
│ CAD │ Canadian Dollar │
├───────────┼──────────────────────────────────────────┤
│ CDF │ Congolese Franc │
├───────────┼──────────────────────────────────────────┤
│ CHF │ Swiss Franc │
├───────────┼──────────────────────────────────────────┤
│ CKD │ CKD │
├───────────┼──────────────────────────────────────────┤
│ CLP │ Chilean Peso │
├───────────┼──────────────────────────────────────────┤
│ CNY │ Chinese Yuan │
├───────────┼──────────────────────────────────────────┤
│ COP │ Colombian Peso │
├───────────┼──────────────────────────────────────────┤
│ CRC │ Costa Rican Colón │
├───────────┼──────────────────────────────────────────┤
│ CUP │ Cuban Peso │
├───────────┼──────────────────────────────────────────┤
│ CVE │ Cape Verdean Escudo │
├───────────┼──────────────────────────────────────────┤
│ CZK │ Czech Koruna │
├───────────┼──────────────────────────────────────────┤
│ DJF │ Djiboutian Franc │
├───────────┼──────────────────────────────────────────┤
│ DKK │ Danish Krone │
├───────────┼──────────────────────────────────────────┤
│ DOP │ Dominican Peso │
├───────────┼──────────────────────────────────────────┤
│ DZD │ Algerian Dinar │
├───────────┼──────────────────────────────────────────┤
│ EGP │ Egyptian Pound │
├───────────┼──────────────────────────────────────────┤
│ ERN │ Eritrean Nakfa │
├───────────┼──────────────────────────────────────────┤
│ ETB │ Ethiopian Birr │
├───────────┼──────────────────────────────────────────┤
│ EUR │ Euro │
├───────────┼──────────────────────────────────────────┤
│ FJD │ Fijian Dollar │
├───────────┼──────────────────────────────────────────┤
│ FKP │ Falkland Islands Pound │
├───────────┼──────────────────────────────────────────┤
│ FOK │ FOK │
├───────────┼──────────────────────────────────────────┤
│ GBP │ British Pound │
├───────────┼──────────────────────────────────────────┤
│ GEL │ Georgian Lari │
├───────────┼──────────────────────────────────────────┤
│ GGP │ GGP │
├───────────┼──────────────────────────────────────────┤
│ GHS │ Ghanaian Cedi │
├───────────┼──────────────────────────────────────────┤
│ GIP │ Gibraltar Pound │
├───────────┼──────────────────────────────────────────┤
│ GMD │ Gambian Dalasi │
├───────────┼──────────────────────────────────────────┤
│ GNF │ Guinean Franc │
├───────────┼──────────────────────────────────────────┤
│ GTQ │ Guatemalan Quetzal │
├───────────┼──────────────────────────────────────────┤
│ GYD │ Guyanaese Dollar │
├───────────┼──────────────────────────────────────────┤
│ HKD │ Hong Kong Dollar │
├───────────┼──────────────────────────────────────────┤
│ HNL │ Honduran Lempira │
├───────────┼──────────────────────────────────────────┤
│ HRK │ Croatian Kuna │
├───────────┼──────────────────────────────────────────┤
│ HTG │ Haitian Gourde │
├───────────┼──────────────────────────────────────────┤
│ HUF │ Hungarian Forint │
├───────────┼──────────────────────────────────────────┤
│ IDR │ Indonesian Rupiah │
├───────────┼──────────────────────────────────────────┤
│ ILS │ Israeli New Shekel │
├───────────┼──────────────────────────────────────────┤
│ IMP │ IMP │
├───────────┼──────────────────────────────────────────┤
│ INR │ Indian Rupee │
├───────────┼──────────────────────────────────────────┤
│ IQD │ Iraqi Dinar │
├───────────┼──────────────────────────────────────────┤
│ IRR │ Iranian Rial │
├───────────┼──────────────────────────────────────────┤
│ ISK │ Icelandic Króna │
├───────────┼──────────────────────────────────────────┤
│ JEP │ JEP │
├───────────┼──────────────────────────────────────────┤
│ JMD │ Jamaican Dollar │
├───────────┼──────────────────────────────────────────┤
│ JOD │ Jordanian Dinar │
├───────────┼──────────────────────────────────────────┤
│ JPY │ Japanese Yen │
├───────────┼──────────────────────────────────────────┤
│ KES │ Kenyan Shilling │
├───────────┼──────────────────────────────────────────┤
│ KGS │ Kyrgystani Som │
├───────────┼──────────────────────────────────────────┤
│ KHR │ Cambodian Riel │
├───────────┼──────────────────────────────────────────┤
│ KID │ KID │
├───────────┼──────────────────────────────────────────┤
│ KMF │ Comorian Franc │
├───────────┼──────────────────────────────────────────┤
│ KPW │ North Korean Won │
├───────────┼──────────────────────────────────────────┤
│ KRW │ South Korean Won │
├───────────┼──────────────────────────────────────────┤
│ KWD │ Kuwaiti Dinar │
├───────────┼──────────────────────────────────────────┤
│ KYD │ Cayman Islands Dollar │
├───────────┼──────────────────────────────────────────┤
│ KZT │ Kazakhstani Tenge │
├───────────┼──────────────────────────────────────────┤
│ LAK │ Laotian Kip │
├───────────┼──────────────────────────────────────────┤
│ LBP │ Lebanese Pound │
├───────────┼──────────────────────────────────────────┤
│ LKR │ Sri Lankan Rupee │
├───────────┼──────────────────────────────────────────┤
│ LRD │ Liberian Dollar │
├───────────┼──────────────────────────────────────────┤
│ LSL │ Lesotho Loti │
├───────────┼──────────────────────────────────────────┤
│ LYD │ Libyan Dinar │
├───────────┼──────────────────────────────────────────┤
│ MAD │ Moroccan Dirham │
├───────────┼──────────────────────────────────────────┤
│ MDL │ Moldovan Leu │
├───────────┼──────────────────────────────────────────┤
│ MGA │ Malagasy Ariary │
├───────────┼──────────────────────────────────────────┤
│ MKD │ Macedonian Denar │
├───────────┼──────────────────────────────────────────┤
│ MMK │ Myanmar Kyat │
├───────────┼──────────────────────────────────────────┤
│ MNT │ Mongolian Tugrik │
├───────────┼──────────────────────────────────────────┤
│ MOP │ Macanese Pataca │
├───────────┼──────────────────────────────────────────┤
│ MRU │ Mauritanian Ouguiya │
├───────────┼──────────────────────────────────────────┤
│ MUR │ Mauritian Rupee │
├───────────┼──────────────────────────────────────────┤
│ MVR │ Maldivian Rufiyaa │
├───────────┼──────────────────────────────────────────┤
│ MWK │ Malawian Kwacha │
├───────────┼──────────────────────────────────────────┤
│ MXN │ Mexican Peso │
├───────────┼──────────────────────────────────────────┤
│ MYR │ Malaysian Ringgit │
├───────────┼──────────────────────────────────────────┤
│ MZN │ Mozambican Metical │
├───────────┼──────────────────────────────────────────┤
│ NAD │ Namibian Dollar │
├───────────┼──────────────────────────────────────────┤
│ NGN │ Nigerian Naira │
├───────────┼──────────────────────────────────────────┤
│ NIO │ Nicaraguan Córdoba │
├───────────┼──────────────────────────────────────────┤
│ NOK │ Norwegian Krone │
├───────────┼──────────────────────────────────────────┤
│ NPR │ Nepalese Rupee │
├───────────┼──────────────────────────────────────────┤
│ NZD │ New Zealand Dollar │
├───────────┼──────────────────────────────────────────┤
│ OMR │ Omani Rial │
├───────────┼──────────────────────────────────────────┤
│ PAB │ Panamanian Balboa │
├───────────┼──────────────────────────────────────────┤
│ PEN │ Peruvian Sol │
├───────────┼──────────────────────────────────────────┤
│ PGK │ Papua New Guinean Kina │
├───────────┼──────────────────────────────────────────┤
│ PHP │ Philippine Piso │
├───────────┼──────────────────────────────────────────┤
│ PKR │ Pakistani Rupee │
├───────────┼──────────────────────────────────────────┤
│ PLN │ Polish Zloty │
├───────────┼──────────────────────────────────────────┤
│ PND │ PND │
├───────────┼──────────────────────────────────────────┤
│ PRB │ PRB │
├───────────┼──────────────────────────────────────────┤
│ PYG │ Paraguayan Guarani │
├───────────┼──────────────────────────────────────────┤
│ QAR │ Qatari Rial │
├───────────┼──────────────────────────────────────────┤
│ RON │ Romanian Leu │
├───────────┼──────────────────────────────────────────┤
│ RSD │ Serbian Dinar │
├───────────┼──────────────────────────────────────────┤
│ RUB │ Russian Ruble │
├───────────┼──────────────────────────────────────────┤
│ RWF │ Rwandan Franc │
├───────────┼──────────────────────────────────────────┤
│ SAR │ Saudi Riyal │
├───────────┼──────────────────────────────────────────┤
│ SBD │ Solomon Islands Dollar │
├───────────┼──────────────────────────────────────────┤
│ SCR │ Seychellois Rupee │
├───────────┼──────────────────────────────────────────┤
│ SDG │ Sudanese Pound │
├───────────┼──────────────────────────────────────────┤
│ SEK │ Swedish Krona │
├───────────┼──────────────────────────────────────────┤
│ SGD │ Singapore Dollar │
├───────────┼──────────────────────────────────────────┤
│ SHP │ St. Helena Pound │
├───────────┼──────────────────────────────────────────┤
│ SLL │ Sierra Leonean Leone │
├───────────┼──────────────────────────────────────────┤
│ SLS │ SLS │
├───────────┼──────────────────────────────────────────┤
│ SOS │ Somali Shilling │
├───────────┼──────────────────────────────────────────┤
│ SRD │ Surinamese Dollar │
├───────────┼──────────────────────────────────────────┤
│ SSP │ South Sudanese Pound │
├───────────┼──────────────────────────────────────────┤
│ STN │ São Tomé & Príncipe Dobra │
├───────────┼──────────────────────────────────────────┤
│ SYP │ Syrian Pound │
├───────────┼──────────────────────────────────────────┤
│ SZL │ Swazi Lilangeni │
├───────────┼──────────────────────────────────────────┤
│ THB │ Thai Baht │
├───────────┼──────────────────────────────────────────┤
│ TJS │ Tajikistani Somoni │
├───────────┼──────────────────────────────────────────┤
│ TMT │ Turkmenistani Manat │
├───────────┼──────────────────────────────────────────┤
│ TND │ Tunisian Dinar │
├───────────┼──────────────────────────────────────────┤
│ TOP │ Tongan Paʻanga │
├───────────┼──────────────────────────────────────────┤
│ TRY │ Turkish Lira │
├───────────┼──────────────────────────────────────────┤
│ TTD │ Trinidad & Tobago Dollar │
├───────────┼──────────────────────────────────────────┤
│ TVD │ TVD │
├───────────┼──────────────────────────────────────────┤
│ TWD │ New Taiwan Dollar │
├───────────┼──────────────────────────────────────────┤
│ TZS │ Tanzanian Shilling │
├───────────┼──────────────────────────────────────────┤
│ UAH │ Ukrainian Hryvnia │
├───────────┼──────────────────────────────────────────┤
│ UGX │ Ugandan Shilling │
├───────────┼──────────────────────────────────────────┤
│ USD │ US Dollar │
├───────────┼──────────────────────────────────────────┤
│ UYU │ Uruguayan Peso │
├───────────┼──────────────────────────────────────────┤
│ UZS │ Uzbekistani Som │
├───────────┼──────────────────────────────────────────┤
│ VES │ Venezuelan Bolívar │
├───────────┼──────────────────────────────────────────┤
│ VND │ Vietnamese Dong │
├───────────┼──────────────────────────────────────────┤
│ VUV │ Vanuatu Vatu │
├───────────┼──────────────────────────────────────────┤
│ WST │ Samoan Tala │
├───────────┼──────────────────────────────────────────┤
│ XAF │ Central African CFA Franc │
├───────────┼──────────────────────────────────────────┤
│ XCD │ East Caribbean Dollar │
├───────────┼──────────────────────────────────────────┤
│ XOF │ West African CFA Franc │
├───────────┼──────────────────────────────────────────┤
│ XPF │ CFP Franc │
├───────────┼──────────────────────────────────────────┤
│ YER │ Yemeni Rial │
├───────────┼──────────────────────────────────────────┤
│ ZAR │ South African Rand │
├───────────┼──────────────────────────────────────────┤
│ ZMW │ Zambian Kwacha │
├───────────┼──────────────────────────────────────────┤
│ ZWB │ ZWB │
└───────────┴──────────────────────────────────────────┘
在终端中运行以下命令以列出所有可用货币
valuta-list-currencies
自定义货币
要注册新的自定义货币,请按照以下操作进行
from valuta.base import BaseCurrency
class XYZ(BaseCurrency):
"""XYZ - The XYZ currency."""
uid: str = "XYZ"
rate: int = 100_000_000
从 CSV 导出中生成货币
如果 流通货币列表 有更新,以相同的方式获取它,将其保存为 list_of_circulating_currencies.csv 在源中,然后运行以下命令
valuta-generate-currencies --skip-first-line
测试
简单输入
pytest -vvv
或使用tox
tox
或使用tox检查特定环境
tox -e py39-django32
编写文档
保持以下层次结构。
=====
title
=====
header
======
sub-header
----------
sub-sub-header
~~~~~~~~~~~~~~
sub-sub-sub-header
^^^^^^^^^^^^^^^^^^
sub-sub-sub-sub-header
++++++++++++++++++++++
sub-sub-sub-sub-sub-header
**************************
许可证
GPL-2.0-only OR LGPL-2.1-or-later
支持
对于任何问题,请通过作者部分提供的电子邮件联系我。
项目详情
下载文件
下载适合您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码发行版
构建发行版
valuta-0.3.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ad7cf8a0355aad485a3083d6d35030dd2a984455460bc1573e4149b6f078c2c1 |
|
MD5 | ba0d25e1c32945dec5eeb48646e59d10 |
|
BLAKE2b-256 | 858719e1fc6deb065bec066f7e97c8e2d233a0212be89057ceb214a9e024fc3a |
valuta-0.3.2-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9ffbd803410714cc3e4d5fa456683bd1bafd783d13e0ab06699687bdd2b68487 |
|
MD5 | e383160b1b2af3a083b134a0c713d9b1 |
|
BLAKE2b-256 | bfa89b456a0ce6555aefa5c2149e60d61b24d6b8064176d2ccc7cb33885a04a4 |