Python中四舍五入到小数点后2位

Python中四舍五入到小数点后2位,python,Python,这不是一个重复,因为我已经检查了所有之前,这篇文章在这个网站上。我想我已经做到了头两个要点。第一个,我将通过一个字符串,但我愿意改变,如果你知道另一种方式。第二个是使用逗号分隔符表示$。所以我将使用浮动,但如果找到更好的方法,我再次愿意改变 但是我被卡住了。 打印%.2f%str是我找到的,但我需要把它四舍五入到两个小数点和最后一个项目符号 代码: 外壳: C:\Users\jacke\PycharmProjects\ASLevelHomeworkWeek18\venv\Scripts\pyth

这不是一个重复,因为我已经检查了所有之前,这篇文章在这个网站上。我想我已经做到了头两个要点。第一个,我将通过一个字符串,但我愿意改变,如果你知道另一种方式。第二个是使用逗号分隔符表示$。所以我将使用浮动,但如果找到更好的方法,我再次愿意改变

但是我被卡住了。 打印%.2f%str是我找到的,但我需要把它四舍五入到两个小数点和最后一个项目符号

代码:

外壳:

C:\Users\jacke\PycharmProjects\ASLevelHomeworkWeek18\venv\Scripts\python.exe C:/Users/jacke/PycharmProjects/ASLevelHomeworkWeek18/ASLevelHomeworkWeek18.py 6567.62 Traceback (most recent call last): %.2f File 

C:/Users/jacke/PycharmProjects/ASLevelHomeworkWeek18/ASLevelHomeworkWeek18.py", line 10, in <module> print(random_number()) File

C:/Users/jacke/PycharmProjects/ASLevelHomeworkWeek18/ASLevelHomeworkWeek18.py", line 7, in random_number print("%.2f") % str TypeError: unsupported operand type(s) for %: 'NoneType' and 'type' Process finished with exit code 1 

如果我明白你的意思,你想把数字四舍五入到小数点后2位。我会这样做的

import random


def random_number():
    random_dollars = random.uniform(1, 10000)
    split = str(random_dollars).split(".")
    if (len(split) == 2 ):
      if (len(split[1]) == 1 ):# checks if 1 digit after decimal place
         answer = split[0] + ".0"
      split[1] = str(int(int(split[1]) / (10 ** (len(split[1]) - 3) )))
      # Gets 3 decimal places

      if int(split[1][-1:]) => 5: #Checks if last digit is above or equal to 5
        split[1] = int(split[1][:-1])
        split[1] += 1

      else:
        split[1] = int(split[1][:-1])
      answer = split[0] + '.' + str(split[1])

    else:
      answer = split[0] + ".00"
    print(answer)

random_number()

因此,如果随机数为100,它将加2个零。如果数字像100.1,它将加一个零。它还将环绕它。

您可以如下设置货币格式:

 def random_number():
    random_dollars = random.uniform(1, 10000)
    result = '$ {:0>9}'.format('{:,.2f}'.format(random_dollars))
    print(result)
{:0>10}表示:将字符串左移到宽度为9的0处。 {:,.2f}四舍五入到小数点后两位.2f,并添加逗号作为分隔符

请注意:通过使用random.uniform1,10000,您的大多数数字都将大于1000,如果您想用少量测试脚本,您可以使用random\u$s=10**random.uniform0,4:


TL;DR:你必须把%直接放在字符串后面,你必须把一个实变量放在那里,而不是str类型

从错误消息的最后一行可以看出问题出在%运算符上。您还可以看到,它试图对两个类型为“NoneType”和“type”的对象执行操作。由于将整个print语句放在%前面,并且print返回None类型的None,因此第一个操作数的类型为NoneType。然后,第二个操作数是str类型,正如刚才所说,它是一个类型。您可以通过在字符串后移动%运算符并用变量random_$替换str来解决此问题,因为这是您要插入字符串的内容

随机输入 def随机数: random_美圆=random.uniform1.00,10000.00 打印单位:美元,2 这: 打印%.2f%随机\u美元 打印随机数
如果你没有告诉我们你被困在哪里。您收到了什么错误消息,以及什么错误结果?如果你创建一个例子,你会得到更多更好的答案。尤其要确保输入和预期的测试数据是完整的,而不是伪数据,并且可以轻松剪切并粘贴到编辑器中,以允许测试建议的解决方案。C:\Users\jacke\PycharmProjects\ASLevelHomeworkWeek18\venv\Scripts\python.exe C:/Users/jacke/PycharmProjects/ASLevelHomeworkWeek18/ASLevelHomeworkWeek18.py 6567.62回溯上次调用:%.2f文件C:/Users/jacke/PycharmProjects/ASLevelHomeworkWeek18/ASLevelHomeworkWeek18.py,第10行,在printrandom_编号文件C:/Users/jacke/PycharmProjects/ASLevelHomeworkWeek18/ASLevelHomeworkWeek18.py,第7行,在随机数字打印%.2f%str TypeError:不支持%的操作数类型:'非类型'和'类型'进程已完成,退出代码为1。请将该信息编辑到问题中。请花时间将要求作为文本而不是图像包含在问题中,并添加错误消息。
 def random_number():
    random_dollars = random.uniform(1, 10000)
    result = '$ {:0>9}'.format('{:,.2f}'.format(random_dollars))
    print(result)
 def random_number():
    random_dollars = 10**random.uniform(0, 4)
    result = '$ {:0>9}'.format('{:,.2f}'.format(random_dollars))
    print(result)
def random_number():
    random_dollars = random.uniform (1.00, 10000.00)
    n = round(random_dollars,2)

    bd, d = str(n).split('.')

    if len(d) == 1:
        n = bd + "." + d + '0'
        return n

    else:
        return n




for i in range(1, 20):

 print(random_number())

7340.55
7482.70
3956.81
3044.50
4108.57
4864.90
235.00
9831.98
960.97
1172.28
5221.31
3663.50
5410.50
3448.52
8288.13
293.48
1390.68
9216.15
6493.65