我正在尝试将数字的输出限制为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)
答案 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
。一个简单的repr
或str
或%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
相乘。这就是抱怨的。
要解决此问题,请删除引号。然后,您输入的数字类型为float
或int
(整数),两者都可以乘以float
(1.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)