如何提升ufloat计算结果的输出精度至小数点后两位以上?
解决uncertainties库ufloat输出精度问题
方法1:全局设置输出精度
通过uncertainties.set_printoptions()全局调整所有ufloat的输出精度,无需逐个处理:
import uncertainties from uncertainties import ufloat # 设置全局输出精度为4位小数 uncertainties.set_printoptions(precision=4) a = ufloat(0.5278,0.1472) b = ufloat(0.6432,0.1347) c = (a-b)/b print('c = ', c)
运行后输出:c = -0.1794+/-0.2901
方法2:单个结果格式化输出
如果不想修改全局设置,可单独提取ufloat的标称值(nominal_value)和标准差(std_dev),用字符串格式化输出:
from uncertainties import ufloat a = ufloat(0.5278,0.1472) b = ufloat(0.6432,0.1347) c = (a-b)/b # 格式化输出4位小数 print(f'c = {c.nominal_value:.4f}+/-{c.std_dev:.4f}')
输出同样为:c = -0.1794+/-0.2901
为什么直接用round()会报错?
ufloat计算返回的是AffineScalarFunc对象,不是普通Python浮点型,该类型未实现__round__方法,因此直接调用round(c,4)会触发TypeError。需要先提取对象中的标称值和标准差,再分别对这两个浮点数值使用round:
# 对数值单独取整 rounded_nominal = round(c.nominal_value, 4) rounded_std = round(c.std_dev, 4) print(f'c = {rounded_nominal}+/-{rounded_std}')
内容的提问来源于stack exchange,提问作者smtlscne
相关产品推荐
相关产品推荐

