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,这毫无意义。
我怀疑你根本不想要一个字符串,你只是想把这个数字四舍五入。为此,使用
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 |
实际上,在对值进行算术运算之前对它们进行取整几乎总是一个坏主意;这只是不必要地增加了取整误差。在打印/写入磁盘等阶段,最好尽可能长地保持最高的精度值,并在最后一秒理想情况下使用
要记住的另一件事是,并非所有的实数都能精确地表示为浮点数。例如,
解决这个问题和其他问题的最佳方法是使用
这样做的一种方法是:
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 是你用来代替% 的东西"
因此,它依次进行
请注意,我已经重写了您的
1 | costEdit(nCost) |
任何你想要的数字,它都可以做数学运算。
还要注意,我已经用
1 | print costEdit(80) |
得到
1 | 100 |
但是现在它意味着你可以用
1 | print 4*costEdit(80) |
而不是一路打印
1 | 400 |
问题?留下评论。
快乐编码!
编辑:关于您的错误,
我想我已经复制了它并理解了这个问题。
当我键入:
1 | costEdit('15') |
我明白你的错误。
这是因为当你做
在python中,不能将EDOCX1(数字类型)与
要纠正这种情况,只需去掉引号。然后输入一个
我希望这能解决你的问题——我晚上得离开电脑。如果没有帮助,请留言,我明天就回来。
否则,我很高兴我能帮你,并记得在你的问题上选择一个最佳答案,这样那些帮助你的人就可以得到他们宝贵的价值。
您可以对浮动使用特殊格式代码
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)) |