numbers 模块
模块:
borax.numbers
常量定义
numbers
提供了下列的模块级常量。
- numbers.MAX_VALUE_LIMIT = 1_0000_0000_0000
本模块可以处理的数字上限,值为一万亿(10^12) , 超过该值将抛出 ValueError
异常,适用本模块的所有函数。
- LOWER_DIGITS = '零一二三四五六七八九'
1-9小写数字。
- UPPER_DIGITS = '零壹贰叁肆伍陆柒捌玖'
1-9大写数字。
中文数字
Add in v3.4.0
数字用法规定
中文数字按照 大写/小写 、计量/编号 的方式划分为四种形式。
形式 | 示例(以204为例) | 使用场景 |
---|---|---|
小写、计量 | 二百零四 | 汉字数字形式、法条序号 |
大写、计量 | 贰佰零肆 | 财务相关 |
小写、编号 | 二百〇四 | 年份 |
大写、编号 | 贰佰〇肆 |
根据 《出版物上数字用法(GB/T-15835-2011)》 的规定,汉字 “零” 和 “〇” 是有严格的使用场景。
阿拉伯数字“0”有“零”和“〇”两种汉字书写形式。一个数字用作计量时,其中“0”的汉字书写形式为“零”,用作编号时,“0”的汉字书写形式为“〇”。
示例:“3052(个)”的汉字数字形式为“三千零五十二”(不写为“三千〇五十二”)
“95.06”的汉字数字形式为“九十五点零六”(不写为“九十五点〇六”)
“公元2012(年)”的汉字数字形式为“二〇一二”(不写为“二零一二”)
---- 出版物上数字用法(GB/T-15835-2011)
API
基于上述使用规定, ChineseNumbers
类将整数转化为对应的中文数字。
- ChineseNumbers.measure_number(num: Union[int, str], upper: bool = False) -> str
Update in v3.5.1: 新增upper参数。
将数字转化为 计量大/小写 的中文数字,数字0的中文形式为“零”。
- ChineseNumbers.order_number(num: Union[int, str], upper: bool = False) -> str
将数字转化为 编号大/小写 的中文数字,数字0的中文形式为“〇”。
Update in v3.5.1: 新增upper参数。
- ChineseNumbers.order_number(num: Union[int, str], upper: bool = False) -> str
将数字转化为 计量/编号 + 大/小写 的中文数字,数字0的中文形式为“〇”。 本函数不再推荐直接使用。
总结
函数 | 结果 | 备注 |
---|---|---|
ChineseNumbers.to_chinese_number(204) | 二百零四 | 小写、计量 |
ChineseNumbers.to_chinese_number(204, , upper=True) | 贰佰零肆 | 大写、计量 |
ChineseNumbers.to_chinese_number(204, , upper=False) | 二百〇四 | 小写、编号 |
ChineseNumbers.to_chinese_number(204, , upper=True, order=True) | 贰佰〇肆 | 大写、编号 |
ChineseNumbers.measure_number(204) | 二百零四 | 计量数字 |
ChineseNumbers.order_number(204) | 二百〇四 | 编号数字 |
例子
from borax.numbers import ChineseNumbers
print(ChineseNumbers.to_chinese_number(204)) # 二百零四
print(ChineseNumbers.measure_number(204)) # 二百零四
print(ChineseNumbers.order_number(1056)) # 一千〇五十六
财务大写金额
Add in v3.3.0
finance 提供了一系列的财务金融工具。
规范依据
本函数的书写规则的根据是《会计基础工作规范》。
第五十二条 填制会计凭证,字迹必须清晰、工整,并符合下列要求:
(一)阿拉伯数字应当一个一个地写,不得连笔写。阿拉伯金额数字前面应当书写货币币种符号或者货币名称简写和币种符号。币种符号与阿拉伯金额数字之间不得留有空白。凡阿拉伯数字前写有币种符号的,数字后面不再写货币单位。
(二)所有以元为单位(其他货币种类为货币基本单位,下同)的阿拉伯数字,除表示单价等情况外,一律填写到角分;无角分的,角位和分位可写“00”,或者符号“——”;有角无分的,分位应当写“0”,不得用符号“——”代替。
(三)汉字大写数字金额如零、壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿等,一律用正楷或者行书体书写,不得用0、一、二、三、四、五、六、七、八、九、十等简化字代替,不得任意自造简化字。大写金额数字到元或者角为止的,在“元”或者“角”字之后应当写“整”字或者“正”字;大写金额数字有分的,分字后面不写“整”或者“正”字。
(四)大写金额数字前未印有货币名称的,应当加填货币名称,货币名称与金额数字之间不得留有空白。
(五)阿拉伯金额数字中间有“0”时,汉字大写金额要写“零”字;阿拉伯数字金额中间连续有几个“0”时,汉字大写金额中可以只写一个“零”字;阿拉伯金额数字元位是“0”,或者数字中间连续有几个“0”、元位也是“0”但角位不是“0”时,汉字大写金额可以只写一个“零”字,也可以不写“零”字。
对第(五)款最后一项的解释,如540.4 既可以表示 伍佰肆拾元肆角零分 ,也可以表示 伍佰肆拾元零肆角零分 ,本函数采用前者表示方法。
使用示例
将数字转化为财务大写金额的字符串,函数签名:
to_capital_str(num: Union[int, float, Decimal, str]) -> str
输入值可以为以下几种类型:
- 数字:如
32
,4.56
等; - 字符串,如
'32'
,'4.56'
等; - 小数,如
decimal.Decimal('8.29')
等。
例子:
>>> from borax.numbers import FinanceNumbers
>>> FinanceNumbers.to_capital_str(100000000)
'壹亿元整'
>>>FinanceNumbers.to_capital_str(4578442.23)
'肆佰伍拾柒万捌仟肆佰肆拾贰元贰角叁分'
>>>FinanceNumbers.to_capital_str(107000.53)
壹拾万柒仟元伍角叁分