python内容限制_关于python:如何限制输出的最⼤字符数?本问题已经有最佳答案,请猛点这⾥访问。
我试图将⼀个数字的输出限制为4个字符(包括⼩数)。
1
2
3
4def 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
6Traceback (most recent call last):
File"C:\Python33\My Codes\TextTowns\TextTowns.py", line 59, in
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)
术语吹⽑求疵:如果ncost等于8.364912734,它就不是整数。整数是整数。
我的错,谢谢:P
这是⼀张便条。如果你得到⼀个⼤于9.99的数字,你会遇到5个以上的字符。将⼩数位数限制在2位还是只有4个字符更重要?你愿意⽤1000⽽不是1000.01吗?
您希望此函数返回舍⼊数字的字符串表⽰形式还是实际的舍⼊数字?
四舍五⼊的数字:P
这不是Python的副本,它将浮点限制为两个⼩数点。这个问题是关于这样⼀个事实:13.95并没有精确地表⽰为float,⽽python 2.5和更早的repr以⾮直观的⽅式表⽰了这些值。
您遇到的问题是⼀个数字和⼀个数字的字符串表⽰形式之间的混淆。这些是不同的东西。
当你这样做的时候:
1nCost = '%.2f'%(nCost*1.25)
…您将数字乘以1.25,然后⽤⼀个字符串替换它,该字符串最多代表两个⼩数点。所以,当你这样做的时候:
1nCost = nCost * 1.25
…你想把⼀个字符串乘以1.25,这毫⽆意义。
我怀疑你根本不想要⼀个字符串,你只是想把这个数字四舍五⼊。为此,使⽤round功能:
1nCost = 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)实际上是
python格式化输出format13.949999999999999289457264。⼀个简单的repr或str或%f会把这个打印成13.95,所以你可能不会注意到……但它仍然不是13.95。
解决这个问题和其他问题的最佳⽅法是使⽤Decimal类型⽽不是float类型。然后可以将值精确舍⼊到⼩数点后2位,在⼩数点后2位的上下⽂中进⾏数学运算,等等。
⾮常感谢!⼯作完美,没有瑕疵!授予骑⼠⾝份
这样做的⼀种⽅法是:
1
2
3
4def 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作为参数。这意味着现在您可以拨打:
1costEdit(nCost)
任何你想要的数字,它都可以做数学运算。
还要注意,我已经⽤return替换了print。这意味着现在,你必须写:
1print costEdit(80)
得到
1100
但是现在它意味着你可以⽤costEdit来做数学,⽐如:
1print 4*costEdit(80)
⽽不是⼀路打印100,它只会打印
1400
问题?留下评论。
快乐编码!
编辑:关于您的错误,
我想我已经复制了它并理解了这个问题。
当我键⼊:
1costEdit('15')
我明⽩你的错误。
这是因为当你做costEdit('15')时,你进⼊'15',⽽不是15。如果值介于''或""之间,则处理的是string类型的值。
在python中,不能将EDOCX1(数字类型)与string相乘。这就是我们抱怨的。
要纠正这种情况,只需去掉引号。然后输⼊⼀个float或int类型的数字,这两个类型都可以乘以float(1.25在costEdit()中的值)。我希望这能解决你的问题——我晚上得离开电脑。如果没有帮助,请
留⾔,我明天就回来。
否则,我很⾼兴我能帮你,并记得在你的问题上选择⼀个最佳答案,这样那些帮助你的⼈就可以得到他们宝贵的价值。
编辑你原来的问题——添加到结尾。插⼊当前⽤于获取此错误的代码块,然后插⼊此错误本⾝。如果我帮不了你,别⼈会帮你的。
在这种情况下是可以的。你能回去把你输⼊的内容包括进去吗?如⾏:costEdit(x)?
@⽤户3092506试图在我更新的帖⼦中修复您的问题。读⼀下。希望我帮忙!
您可以对浮动使⽤特殊格式代码
1print('{0:.2f}'.format(nCost))
将2F改为4F以增加位数
这似乎不起作⽤,有什么想法吗?现在编码:def costEdit(): global nCost nCost = nCost * 1.25 print('{0:.2g}'.format(nCost))。使⽤2F⽽不是2G。应该可以。所以"0:.2f"不是"0:.2g"
在现有代码中,这与%.2f'%没有任何不同。但这并不能解决他的问题(试图将格式化字符串乘以1.25,⽽不是先乘以数字再格式化它)。python 2.6或更⾼版本,使⽤format():
1print('{0:.3g}'.format(nCost))
'0:.2f'。格式化(ncost),因此2f不是2g
你也能谈谈如何得到这个数值作为⼀个数字类型吗?这将满⾜问题的"编辑要替换的ncost变量"部分。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论