如何获得正确的十进制结果

时间:2017-03-20 00:58:51

标签: python python-3.x precision

我正在尝试编写一个程序来搜索小数基数中重复的重复表示。因此,我必须做这样的事情:

1.1**7

等于1.9487171。但是,python自动将该结果表示为float,而给定值为 exact 。这就是我需要的,这与舍入浮点数不同。我还必须允许程序指定有多少小数位。我已经尝试过使用十进制模块,但无法完全使用它。最好的方法是什么?

4 个答案:

答案 0 :(得分:3)

$result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { while($obj = mysqli_fetch_object($result)) { $var[] = $obj; } } echo json_encode($var); echo json_encode($var[3]); 参数应为 strings 。如果你使用decimal.Decimal,它会带来不精确性:

float

VS

>>> decimal.Decimal('1.1')**7
Decimal('1.9487171')
>>>

答案 1 :(得分:2)

decimal module会为您提供准确的结果:

>>> Decimal('1.1') ** 7
Decimal('1.9487171')

对于非十进制基数,fractions module将执行精确算术运算。唯一的问题是输出是分数形式而不是指示您似乎正在寻找的十进制表示法(可能包含重复的,非终止序列):

>>> Fraction(3, 7) ** 5
Fraction(243, 16807)
>>> Context(prec=200).divide(243, 16807)
Decimal('0.014458261438686261676682334741476765633367049443684179211043017790206461593383709168798714821205450110073183792467424287499256262271672517403462842863092758969477003629440114238115071101326828107336229')

答案 2 :(得分:2)

  

分数基数

听起来像fractions,没有?

>>> import fractions
>>> fractions.Fraction(11, 10) ** 7
Fraction(19487171, 10000000)
>>> fractions.Fraction(13, 11) ** 7
Fraction(62748517, 19487171)

答案 3 :(得分:-1)

您是否尝试过在公差范围内检查相等性? E.g。

def approx(left, right, tolerance=1**10-6):
    if left - right < tolerance:
        return True
    else:
        return False