Python 如何在不使用打印的情况下使此浮动精度

Python 如何在不使用打印的情况下使此浮动精度,python,arraylist,Python,Arraylist,我在做作业,是关于梯形规则的数值方法 def trapezoidalRule(F,a,b,n): h = float(b-a)/n f_sum = 0 for i in range(1, n, 1): x = a + i * h f_sum = f_sum + f(x) return h * (0.5 * f(a) + f_sum + 0.5 * f(b)) def f(x): return x**3 a = 2 b = 10 n = 512 print

我在做作业,是关于梯形规则的数值方法

def trapezoidalRule(F,a,b,n):
  h = float(b-a)/n
  f_sum = 0
  for i in range(1, n, 1):
    x = a + i * h
    f_sum = f_sum + f(x)
  return h * (0.5 * f(a) + f_sum + 0.5 * f(b))

def f(x):
  return x**3

a = 2
b = 10
n = 512

print('%.16f' %trapezoidalRule(f, a, b, n))
输出是

2496.0058593750000000
我的问题是,我如何得到这样的精度。。不使用
打印('%.16f'%梯形规则(f,a,b,n))
。我想将结果附加到列表中,精确值如下。。
我已经试过用谷歌搜索了,但是我没有发现与这个问题相关的任何东西,如果我想搜索,有人能告诉我解决方案吗?

梯形规则中的return语句更改为16点精度的格式,请注意,这将导致它变成一个字符串,就好像您将它抛回浮点一样,您将丢失尾随的0

def trapezoidalRule(F,a,b,n):
  h = float(b-a)/n
  f_sum = 0
  for i in range(1, n, 1):
    x = a + i * h
    f_sum = f_sum + f(x)
  return format((h * (0.5 * f(a) + f_sum + 0.5 * f(b))), '.16f')

def f(x):
  return x**3

a = 2
b = 10
n = 512
请参见
梯形规则
中的返回行,现在如果我打印
梯形规则
的精确输出,就像这样:
print(梯形规则(f,a,b,n))
没有格式,我得到:
2496.0058593750000000

要提高精度,请尝试使用
decimal
模块

import decimal

def trapezoidalRule(F,a,b,n):
  h = decimal.Decimal(float(b-a)/n)
  f_sum = 0
  for i in range(1, n, 1):
    x = a + i * h
    f_sum = f_sum + f(x)
  return h * (decimal.Decimal(0.5) * f(a) + f_sum + decimal.Decimal(0.5) * f(b))

def f(x):
  return decimal.Decimal(x**3)

如果您想在末尾打印额外的0-s,那么像现在这样格式化是您唯一的选择。如果您只想对数字进行四舍五入,请检查
round()
函数。您是说我无法将该精确值附加到列表中?您想在列表中存储print语句的值吗?20位数字比浮点的实际精度高,因此这不是一个精确值,只是添加了零的接近值。如果您想要更高的精度,请查看
十进制
模块。是的,精确的输出值@vishalupadhyayth这是我想要的答案,非常感谢您,先生!这也是事实,我很感激你的回答