| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- 金额英文大写转换
- """
- from num2words import num2words
- import math
- def amount_to_english_words(amount: float) -> str:
- """
- 将金额转换为英文大写
-
- Args:
- amount: 金额数字,如 14488
-
- Returns:
- 英文大写字符串,如 "FOURTEEN THOUSAND FOUR HUNDRED AND EIGHTY-EIGHT"
- """
- if amount is None or amount < 0:
- return ''
-
- # 四舍五入到整数
- amount_int = round(amount)
-
- # 转换为英文单词并大写
- words = num2words(amount_int, lang='en')
- return words.upper().replace('-', ' ').replace(',', '')
- def calculate_payment_split(total_amount: float) -> tuple:
- """
- 计算30%和70%的付款金额
-
- 规则:30%向上取整,70% = 总金额 - 30%
- 确保 30% + 70% = 总金额
-
- Returns:
- (deposit_30, balance_70)
- """
- total_int = round(total_amount)
- deposit_30 = math.ceil(total_int * 0.30)
- balance_70 = total_int - deposit_30
- return deposit_30, balance_70
- def format_say_us_only(amount: float) -> str:
- """
- 格式化为 "SAY US {大写} only"
-
- Args:
- amount: 金额数字
-
- Returns:
- 如 "SAY US FOURTEEN THOUSAND FOUR HUNDRED AND EIGHTY EIGHT only"
- """
- words = amount_to_english_words(amount)
- return f"SAY US {words} only"
- if __name__ == '__main__':
- # 测试
- print(format_say_us_only(14488))
- print(format_say_us_only(4346.4))
- print(format_say_us_only(10141.6))
|