Python舍入错误?

时间:2017-08-25 16:12:22

标签: python rounding

有人可以解释一下吗?

输入:

ionic config set backend pro -g

结果:

<?php

    $from = 'How to join contact form <contact@choice.md>';
    $sendTo = 'Name Lastname <namelastname@choice.md>';
    $subject = 'How to join contact form';
    $fields = array('name1' =>'Full Name', 'email1' => 'Email', 'phone1' =>'Phone',
                    'address1' =>'Address','message1' =>'Message');
    $okMessage = 'Patient contact form successfully submitted';
    $errorMessage = 'There was an error while submitting';

    try
    {
        $emailText = "You have new message from How to Join Contact Form\n\n";

        foreach ($_POST as $key => $value) {

           if (isset($fields[$key])) {
               $emailText .= "$fields[$key]: $value\n";
        }
    }

        $headers = array('Content-Type: text/plain; charset="UTF-8";',
            'From: ' . $from,
            'Reply-To: ' . $from,
            'Return-Path: ' . $from,
        );

        mail($sendTo, $subject, $emailText, implode("\n", $headers));

        $responseArray = array('type' => 'success', 'message' => $okMessage);
    }
    catch (\Exception $e)
    {
        $responseArray = array('type' => 'danger', 'message' => $errorMessage);
    }

    ?>

...然而

输入:

58/100*100

结果:

57.99999999999999

另外,如何在第二种情况下始终如一地获得结果?

1 个答案:

答案 0 :(得分:2)

这完全归功于浮点运算 以及python评估包含数字文字的表达式的方式的细微变化。

从python 3开始,上面的表达式将以浮点计算;之前会使用整数运算。

在IEEE754浮点中,0.58远离真值而不是0.26。这足以摒弃输出格式化程序正在使用的启发式方法。

在分割之前执行乘法可以在某些情况下有所帮助,并且可以在此处进行,因为产品可以准确表示。