在Python中乘以Decimal时的精度损失

时间:2017-06-28 09:22:48

标签: python python-2.7 decimal

当尝试在python中乘以两个小数对象时,我遇到了精度损失。我该如何解决这个问题?

    u = Decimal("1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727350138462309122970249248360558507372126441214970999358314132")
   y = Decimal(10**100)
   z = u*y
   str(int(z))
=> '14142135623730950488016887240000000000000000000000000000000000000000000000000000000000000000000000000'

2 个答案:

答案 0 :(得分:5)

十进制不是<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table> <tr> <td> <select name="jens_id[]" class="jens_id" required=""> <option ></option> <option >1</option> <option >2</option> </select> </td> <td></td> </tr> <tr> <td> <select name="jens_id[]" class="jens_id" required=""> <option ></option> <option >1</option> <option >2</option> </select> </td> <td></td> </tr> </table> <script> $(document).ready(function() { // or use attribute equals selector // $('[name="jens_id[]"]') $('.jens_id').change(function() { statteId = $(this).val(); // or this.value console.log(statteId); // get the td and update with value $(this).parent().next().text(statteId); }); }); </script>之类的任意精度,而是具有固定但可更改的精度小数。默认情况下为28,这恰好是您的电话号码暂时中断的地方。

您可以通过执行int或您需要的任何精度来更改此设置。有关详细信息,请转至documentation

答案 1 :(得分:1)

&#34;与基于硬件的二进制浮点不同,十进制模块具有用户可更改的精度(默认为28个位置),可以与给定问题所需的一样大#34;

您可以通过调用decimal.getcontext().prec = 256(或任何其他符合您目的的值)

来更改它