如何限制输出的最大字符数?

时间:2013-12-12 20:34:21

标签: python variables int

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

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

我希望nCost在2位小数处被切断。例如。如果nCost是8.364912734,则将其切换为8.36并编辑要替换的nCost变量。任何想法?

我得到错误:

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'

我将它用作:costEdit(nCost)

4 个答案:

答案 0 :(得分:4)

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

执行此操作时:

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

...您将数字乘以1.25,然后将其替换为表示最多两位小数的字符串。所以,当你这样做时:

    nCost = nCost * 1.25

...你试图将字符串乘以1.25,这没有任何意义。


我怀疑你根本不想要一根绳子;你只想将数字作为数字。为此,请使用round功能:

nCost = round(nCost*1.25, 2)

当然,只要再次乘以1.25,就可以将其“小数点”另一位小数或两位:

>>> 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)

执行此操作的一种方法是使用以下方法:

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

让我为你解决这个问题。

采取行:

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

将其分解为其组成部分:

(' ( (%) .2f) ')%(nCost*1.25)
  • ''内的所有内容都只是一个普通的字符串。
  • %是一个符号,意思是“以后替代”。
  • .2f是Python中的一个命令,它在小数点后截断2个位置。
  • %(nCost*1.25)表示“nCost*1.25代替%

因此,按顺序,它会对nCost*1.25进行数学运算,将其置于字符串中,然后切断其他所有内容,并为您提供剩余的内容。

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

costEdit(nCost)

使用您想要的任何数字,它将进行数学计算。

另请注意,我已将print替换为return。这意味着现在,你必须写:

print costEdit(80)

获取

100

但现在它意味着您可以使用costEdit进行数学运算,例如:

print 4*costEdit(80)

而不是沿途打印100,它只会打印

400

有问题吗?发表评论。

快乐的编码!

编辑:关于你的错误,

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

当我输入:

costEdit('15')

我收到你的错误。

这是因为当您执行costEdit('15')时,您输入的是'15'而不是15。如果值介于''""之间,则表示您处理的值为 type string

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

要解决此问题,请删除引号。然后,您输入的数字类型为floatint(整数),两者都可以乘以float1.25内的值costEdit() })。

我希望这能解决你的问题 - 我必须在晚上离开电脑。如果它没有帮助,请发表评论,明天我会回来。

否则,我很高兴我可以帮助并记住在你的问题上选择一个最好的答案,所以那些帮助的人可以获得他们的宝贵的宝贵点数

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您可以为浮点数使用特殊格式代码

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

将2f更改为4f以增加位数

文档(http://docs.python.org/2/library/stdtypes.html#string-formatting

相关问题