作者doun (噜啦噜啦勒)
看板Python
标题[问题] 如何於除法取到小数42位数?
时间Sun Feb 11 11:53:13 2018
python内建型别decimal看说明最多可以存到小数後17位,
测试过,十七位後的数字都会是乱数
在这样的情况下该怎麽取得17位以後的精确数字呢?
我使用的实验数字是
Decimal(156/283)
计算机算的答案:
0.55123674911660777385
python的答案:
0.55123674911660780484
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 27.105.26.14
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1518321196.A.2BE.html
2F:→ Sunal: Decimal(156) / Decimal(283) 02/11 12:16
3F:→ Sunal: Decimal('0.5512367491166077738515901060') 02/11 12:16
4F:→ Sunal: 小数後17位是计算机float 的限制 02/11 12:17
5F:推 seLain: 试试看用 getcontext().prec = 42 指定 precision ? 02/11 12:17
6F:→ Sunal: the decimal module has a user alterable precision (defa 02/11 12:18
7F:→ Sunal: ulting to 28 places) 02/11 12:18
8F:→ Sunal: getcontext().prec = 42 02/11 12:19
9F:→ kenduest: 是要这样用 Decimal(156) / Decimal(283) 02/11 12:19
10F:→ kenduest: 啊,真快,推文时候已经前面有人回了 02/11 12:19
11F:→ Sunal: 其实文件都有..XD (看文件是个好习惯) 02/11 12:21
感谢大家,已经顺利解答。我也是看这份文件一知半解,
的确应该不能在Decimal里面先做运算,我自己也在getcontext().prec这里设定错误了。
再次谢谢大家协助解惑
※ 编辑: doun (27.105.26.14), 02/11/2018 21:01:49
12F:推 vfgce: 另外一个解法,使用sympy.. 02/12 13:56
13F:→ vfgce: from sympy import S;S('156/283').n(30) 02/12 13:58
14F:→ vfgce: n()可以设定要的精确度............ 02/12 13:59