首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python、与变量不同的舍入和硬编码值

Python、与变量不同的舍入和硬编码值
EN

Stack Overflow用户
提问于 2020-10-29 05:00:03
回答 3查看 81关注 0票数 0

我有一个简单的数学公式,结果是一个十进制数(0.97745),我想将其舍入为4个数字。当我从我的求值变量中这样做时,我得到了(0.9774),但是当我将这个数字硬编码到函数round()中时,我得到了0.9775

以下是代码

代码语言:javascript
复制
zero = 0.9700
effective_beta = 0.00745
loan = {}
loan['beta2'] = 0.0
loan['beta3']  = 0.0
mrktdiff_2 =0.08880400
mrktdiff_3 = 0.026463592000

forecasted_pt = (float(zero) + float(effective_beta) + float(loan['beta2'] or 0.) * float(mrktdiff_2) +
                              float(loan['beta3'] or 0.) * float(mrktdiff_3))
                          
print("before rounding forecastedpt is ")
print(forecasted_pt)
print("after rounding")
print(round(forecasted_pt,4))
print("Dont get this part")
print(round(0.97745,4))

我之所以使用浮点型运算符,是因为这些变量是动态的,有时会导致字符串/空值。

同样,当我在php中运行同样的代码时,我得到了0.9775的值。

编辑:我在katacoda.com编辑器中运行代码,得到以下结果:

代码语言:javascript
复制
before rounding forecastedpt is
0.97745
after rounding
0.9774
Dont get this part
0.9775

但是在repl.com中运行它,我得到的第一个值是: 0.97744999999999,所以我猜它可能是表达式本身的精度

EN

回答 3

Stack Overflow用户

发布于 2020-10-29 05:11:41

试试看:

代码语言:javascript
复制
zero = 0.9700
effective_beta = 0.00745
loan = {}
loan['beta2'] = 0.0
loan['beta3']  = 0.0
mrktdiff_2 =0.08880400
mrktdiff_3 = 0.026463592000

forecasted_pt = (float(zero) + float(effective_beta) + float(loan['beta2'] or 0.) * float(mrktdiff_2) + float(loan['beta3'] or 0.) * float(mrktdiff_3))

print("before rounding forecastedpt is ")
print(forecasted_pt)
print("after rounding")
print(round(forecasted_pt,5))
numb = round(forecasted_pt,5)
print(round(numb,4))
print("Dont get this part")
print(round(0.97745,4))

输出:

代码语言:javascript
复制
before rounding forecastedpt is 
0.9774499999999999
after rounding
0.97745
0.9775
Dont get this part
0.9775

任何语言中的round函数都不会舍入所有的整数,它会将数字去掉,只舍入最后一个数字。

票数 0
EN

Stack Overflow用户

发布于 2020-10-29 05:14:57

来自python documentation

注意:对于浮点数,()的行为可能令人惊讶:例如,round(2.675,2)给出2.67,而不是预期的2.68。这不是一个bug:这是因为大多数小数不能精确地表示为浮点数。有关更多信息,请参见Floating Point Arithmetic:问题和限制。

票数 0
EN

Stack Overflow用户

发布于 2020-10-30 06:18:17

试试这个:我记得10年前在我的统计课上。我的教授一直建议我们将计算四舍五入到6个小数点,因为统计都是关于估计的,它很重要。

代码语言:javascript
复制
zero = 0.9700
effective_beta = 0.00745
loan = {}
loan['beta2'] = 0.0
loan['beta3']  = 0.0
mrktdiff_2 =0.08880400
mrktdiff_3 = 0.026463592000

forecasted_pt = round((float(zero) + float(effective_beta) + float(loan['beta2'] or 0.) * float(mrktdiff_2) + float(loan['beta3'] or 0.) * float(mrktdiff_3)),6)


print(round(forecasted_pt,4))
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64581221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档