我试图写一个程序,用不同的精度计算pi,并打印出数字和时间。我想打印的结果与当前的准确性,每次。我使用print('pi = %*f'%(i, pi)),i是我当前浮点精度的地方。这使得程序将数字舍入为i十进制数字。我正在附加一张图片,显示运行相同算法的结果,但将输出更改为:
print (" pi = ", pi, " =with ", i-1, " decimal points accuracy= in: ", (-1)*t, "sec")
至:
print (" pi = %.*f"%(i, pi), " =with ", i-1, " decimal points accuracy= in: ", (-1)*t, "sec")
这是我的完整代码:
import time
accuracy = 4
for i in range(1,accuracy + 1):
pi = 0
prevPi = 1
x = 0
t = time.time()
while abs((pi * 4) - prevPi) > 10**((-1)*(i+1)):
#while x < lim:
prevPi = pi * 4
pi += (((-1)**(x))/(1+(2*x)))
#print(abs((pi * 4) - prevPi))
x += 1
pi *= 4
t -= time.time()
print (" pi = %.*f"%(i, pi), " =with ", i-1, " decimal points accuracy= in: ", (-1)*t, "sec")

如何在没有四舍五入的情况下打印带有i小数的数字?
发布于 2017-12-13 00:11:31
您可以通过定义截断数字的函数来解决问题。该函数可以采用两个参数:
number,position,中,它将删除以下所有值。def truncate(number, position):
'''Return number with dropped decimal places past specified position.'''
return number - number%(10**position)例如,如果希望将数字3.14截断为3.1,则应调用以下命令:
truncate(3.14, -1)此外,我修改了您的代码,使其更简单,并与PEP 8编码约定匹配。因此,现在它增加了变量命名的清晰度和更好的代码格式。
#!/usr/bin/env python3
'''Module for different pi accuracies calculation time comparison.'''
from time import time
def truncate(number, position):
'''Return number with dropped decimal places past specified position.'''
return number - number%(10**position)
def calculate_pi(accuracy):
'''Return pi with certain floating point accuracy.'''
previous_pi = 0
current_pi = 4
iterator = 1
while abs(current_pi - previous_pi) > 10 ** (accuracy-1):
previous_pi = current_pi
current_pi += 4 * ((-1)**iterator) / (1+(2*iterator))
iterator += 1
return truncate(current_pi, accuracy)
def calculation_speed_comparison(max_accuracy):
'''Print comparison of different accuracy pi calculation time.'''
for current_accuracy in range(max_accuracy+1):
calculation_time = time()
current_pi = calculate_pi(-current_accuracy)
calculation_time -= time()
print('pi = {} with {} decimal points accuracy in {} seconds.'.format(
current_pi, current_accuracy, -calculation_time))
calculation_speed_comparison(4)对此代码的输出与原始代码非常相似:
pi = 3.0 with 0 decimal points accuracy in 3.266334533691406e-05 seconds.
pi = 3.1 with 1 decimal points accuracy in 0.00016045570373535156 seconds.
pi = 3.14 with 2 decimal points accuracy in 0.0014882087707519531 seconds.
pi = 3.141 with 3 decimal points accuracy in 0.01430201530456543 seconds.
pi = 3.1415 with 4 decimal points accuracy in 0.1466822624206543 seconds.https://stackoverflow.com/questions/47782681
复制相似问题