关于python:如何限制输出的最大字符数?

How do I limit an output's maximum number of characters?

本问题已经有最佳答案,请猛点这里访问。

我试图将一个数字的输出限制为4个字符(包括小数)。

1
2
3
4
def costEdit(nCost):
    nCost = '%.2f'%(nCost*1.25)
    nCost = nCost * 1.25
    return nCost

我要把NCOST的小数点后两位截断。例如,如果ncost为8.364912734,则将其切断为8.36,然后编辑要替换的ncost变量。有什么想法吗?

我得到错误:

1
2
3
4
5
6
Traceback (most recent call last):
  File"C:\Python33\My Codes\TextTowns\TextTowns.py", line 59, in <module>
    costEdit(nCost)
  File"C:\Python33\My Codes\TextTowns\TextTowns.py", line 27, in costEdit
    nCost = nCost*1.25
  TypeError: can't multiply sequence by non-int of type 'float'

我用它作为:成本编辑(NCOST)


您遇到的问题是一个数字和一个数字的字符串表示形式之间的混淆。这些是不同的东西。

当你这样做的时候:

1
nCost = '%.2f'%(nCost*1.25)

…您将数字乘以1.25,然后用一个字符串替换它,该字符串最多代表两个小数点。所以,当你这样做的时候:

1
    nCost = nCost * 1.25

…你想把一个字符串乘以1.25,这毫无意义。

我怀疑你根本不想要一个字符串,你只是想把这个数字四舍五入。为此,使用round功能:

1
nCost = round(nCost*1.25, 2)

当然,一旦你再次乘以1.25,你就可以用另一个小数位"解开"它:

1
2
3
4
5
6
7
>>> nCost = 1.33333
>>> nCost = round(nCost*1.25, 2)
>>> nCost
1.33
>>> nCost = nCost * 1.25
>>> nCost
1.6625

实际上,在对值进行算术运算之前对它们进行取整几乎总是一个坏主意;这只是不必要地增加了取整误差。在打印/写入磁盘等阶段,最好尽可能长地保持最高的精度值,并在最后一秒理想情况下使用%.2f/{:.2f}格式。

要记住的另一件事是,并非所有的实数都能精确地表示为浮点数。例如,round(13.4999, 2)实际上是13.949999999999999289457264。一个简单的reprstr%f会把这个打印成13.95,所以你可能不会注意到……但它仍然不是13.95。

解决这个问题和其他问题的最佳方法是使用Decimal类型而不是float类型。然后可以将值精确舍入到小数点后2位,在小数点后2位的上下文中进行数学运算,等等。


这样做的一种方法是:

1
2
3
4
def costEdit(nCost):
    nCost = '%.2f'%(nCost*1.25)
    #nCost = nCost*1.25
    return nCost

让我给你把这个分解一下。

采取行动:

1
'%.2f'%(nCost*1.25)

并将其分解为各个组成部分:

1
(' ( (%) .2f) ')%(nCost*1.25)
  • ''中的所有内容都只是一个普通字符串。
  • %是一个符号,意思是"以后可以替代"。
  • .2f是python中的一个命令,在小数点后截断2位。
  • %(nCost*1.25)的意思是"nCost*1.25是你用来代替%的东西"

因此,它依次进行nCost*1.25的数学运算,将其放入字符串中,然后切断其他所有内容,并给出剩下的内容。

请注意,我已经重写了您的costEdit函数,以接受nCost作为参数。这意味着现在您可以拨打:

1
costEdit(nCost)

任何你想要的数字,它都可以做数学运算。

还要注意,我已经用return替换了print。这意味着现在,你必须写:

1
print costEdit(80)

得到

1
100

但是现在它意味着你可以用costEdit来做数学,比如:

1
print 4*costEdit(80)

而不是一路打印100,它只会打印

1
400

问题?留下评论。

快乐编码!

编辑:关于您的错误,

我想我已经复制了它并理解了这个问题。

当我键入:

1
costEdit('15')

我明白你的错误。

这是因为当你做costEdit('15')时,你进入'15',而不是15。如果值介于''""之间,则处理的是string类型的值。

在python中,不能将EDOCX1(数字类型)与string相乘。这就是我们抱怨的。

要纠正这种情况,只需去掉引号。然后输入一个floatint类型的数字,这两个类型都可以乘以float(1.25costEdit()中的值)。

我希望这能解决你的问题——我晚上得离开电脑。如果没有帮助,请留言,我明天就回来。

否则,我很高兴我能帮你,并记得在你的问题上选择一个最佳答案,这样那些帮助你的人就可以得到他们宝贵的价值。


您可以对浮动使用特殊格式代码

1
print('{0:.2f}'.format(nCost))

将2F改为4F以增加位数

文档(http://docs.python.org/2/library/stdtypes.html字符串格式)


python 2.6或更高版本,使用format():

1
print('{0:.3g}'.format(nCost))