有没有办法在python中禁止舍入?

托尼克斯

有没有一种方法可以禁止python舍入,例如:

>>> getcontext().prec = 11; print (Decimal(1.1237836550999999999)*10**10)
11237836551

我需要显示十进制数字的前10个小数位,因此实际上我需要11237836550作为输出,并且不需要对最后一位进行四舍五入(在这种情况下,0会四舍五入为1)。

有时,我可以提高精度(在这种情况下不可以),然后安全地执行计算,如下所示:

>>> getcontext().prec = 14; print (Decimal(1.12378365509978)*10**10)
11237836550.998

但是,假设您不知道数字“ 0”后的小数部分,例如它可能是1.1237836550999999999999999999999999 ...等等,那么您将不能依靠此“解决方法”。

因此,有没有办法告诉python,“对于此计算,我不希望进行任何舍入,实际上我希望您只将所需的小数位数(在此示例中为10)返回给我,然后丢弃所有内容否则呢?”

我在这里看了一下Python中的截断浮点数,但基本上我不需要的是截断后的浮点数的字符串,而是用来执行计算的另一个十进制数。此外,trunc我链接的帖子中接受的答案功能在这种情况下将不起作用,因为小数将在传递给函数的'f'参数之前被四舍五入:

>>> def trunc(f, n):
...     '''Truncates/pads a float f to n decimal places without rounding'''
...     return ('%.*f' % (n + 1, f))[:-1]
... 
>>> trunc(Decimal(1.12378365509978), 10)
'1.1237836551' # and not 1.1237836550 as needed

我该怎么做?

龙2蝇

这是您所发现的:

from decimal import *

getcontext().prec = 103

def precision(context, prec=100):

    return Decimal(context).quantize(Decimal('.'+'0'*(prec-1)+'1'), rounding=ROUND_DOWN)

print precision(Decimal(10).log10() / Decimal(2).log10())

输出:

3.3219280948873623478703194294893901758648313930245806120547563958159347766086252158501397433593701550

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法舍入我在函数poly.calc的系数中得到的小数?

有没有办法禁止警报?

有没有办法在python的lambda中执行“ if”

有没有办法在python中重载+ =?

有没有办法在Python中包含±(正负)?

有没有办法在python中清除屏幕?

有没有办法在python中输入小写?

有没有办法摆脱python列表中的“'”?

有没有办法在python中打印not bool?

有没有办法在Rails路线中禁止路径?

有没有办法禁止派生类中的基类方法调用?

有没有办法禁止在VIM多行注释中自动插入*字符?

有没有办法踢/禁止discord.py中的每个人?

有没有办法在 symfony 中禁止对特定域的防火墙

有没有办法关闭python中没有文件对象的文件?

有没有办法知道Python中没有索引的列表的哪个数字?

Bigquery:有没有办法将时间戳向上或向下舍入到NEAREST分钟?

有没有办法确保舍入功能总是四舍五入?

有没有办法显示HTML中python数组中的所有元素?

有没有办法在Python中更改有效的进程名称?

有没有办法在Python中覆盖现有(系统)类上的方法?

有没有办法在Android上运行Python?

有没有办法在Python中使用PhantomJS?

有没有办法动态导入Python对象?

有没有办法镜像python函数?

有没有办法用 Python 修改 JSON?

有没有办法反转这个python函数?

有没有办法让python打开网页?

有没有办法减慢WPF中的BackgroundWorker?