【问题标题】:How to print currency symbol and an n-digit decimal number right aligned in Python如何在Python中打印货币符号和n位十进制数右对齐
【发布时间】:2018-12-21 05:21:33
【问题描述】:

我正在制作一个 EMI 计算器,它在显示每月 EMI 后显示摊销表。

如何正确对齐货币符号和任何 n 位十进制数?

我尝试使用 '{0}{1:5.2f}'.format(rupee, amount) 来右对齐货币符号和金额,但它没有解决格式字符串不正确的问题。

金额为小数点后两位以上的浮点数,需要四舍五入到小数点后两位。

这是显示 4 个金额值的代码(我使用 INR 作为货币符号):

rupee = chr(8377)
print('{0}{1:.2f}'.format(rupee, amount1))
print('{0}{1:.2f}'.format(rupee, amount2))
print('{0}{1:.2f}'.format(rupee, amount3))
print('{0}{1:.2f}'.format(rupee, amount4))

需要在此示例代码中进行一些编辑以右对齐货币符号和金额,但我无法弄清楚。

实际输出:

$1.07
$22.34
$213.08
$4.98

预期输出:

  $1.07
 $22.34
$213.08
  $4.98

$符号作为货币符号,因为卢比符号不能直接从键盘输入。

【问题讨论】:

    标签: python python-3.x string-formatting


    【解决方案1】:

    稍微扩展上一个答案:

    rupee = u'\u20B9'
    amounts = [12345.67, 1.07, 22.34, 213.08, 4.98]
    
    for amount in amounts:
        print('{:>10}'.format(rupee + '{:>.2f}'.format(amount)))
    

    输出:

     ₹12345.67
         ₹1.07
        ₹22.34
       ₹213.08
         ₹4.98
    

    【讨论】:

    • 目前还不清楚这个答案对任何其他答案的影响。
    • 问题是如何格式化一个数字,而不是这个答案显示的字符串
    • 很公平。话虽如此,为什么不在格式字符串中包含货币符号替换部分?此外,此代码不会运行,因为 format 似乎将 Unicode 转换为编码文本。例如:print('{:>10}'.format('{}{:>.2f}'.format(rupee.encode('utf-8'), amount)))
    • 感谢 @hjonez,打印命令 print('{:>10}'.format(rupee + '{:>.2f}'.format(amount))) 让我很开心,节省了很多时间,现在我的摊销表中的所有金额都对齐了。
    • @PreetkaranSingh 可移植性和 Unicode 太大,无法添加到无关答案上已经太长的评论线程!我怀疑这已经得到了回答,所以也许研究一下并阅读我给出的链接,这是关于 Unicode-on-Python 的官方讨论。但是在我的代码 sn-p 中可以快速修复,在上面我使用 .encode 来处理 Unicode 字符串。请记住,我是以 Java 编码员的身份来到这里的,所以 Python 可能还有其他考虑因素。
    【解决方案2】:

    如果您知道输出中的最大字符数,则可以执行以下操作。请参阅Format Specification Mini-Language 了解各种可用的格式说明符。

    amounts = ['$1.07', '$22.34', '$213.08', '$4.98']
    
    for amount in amounts:
        print('{:>8}'.format(amount))
    
    # OUTPUT
    #   $1.07
    #  $22.34
    # $213.08
    #   $4.98
    

    【讨论】:

    • 由于 EMI 计算器中 EMI 的可变性,我不知道数字的最大位数。此外,数字没有列出,它们存储在 4 个浮点变量中(principal、interest_amt、EMI、balance)
    • @PreetkaranSingh - 该列表只是为了方便演示示例。我不知道如何让 python 在不指定字符数的情况下动态对齐打印输出。您可能需要测试每个输出的长度以找到最大值,然后相应地生成您的打印语句。
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多