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)实际上是13.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以增加位数

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

这似乎不起作用,有什么想法吗?现在编码: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变量"部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值