根据使用的方法,在C ++中将2个浮点数相除会产生不同的结果

时间:2018-07-02 04:57:26

标签: c++ function floating-point division

在C ++中,为什么通过两种不同的机制(内联和通过函数调用)将2个浮点数相除,结果如下所示?

经过以下将5分为4的计算后,f1 = 0和f2 = 0.8。

#include <iostream>
using namespace std;

int main() {
    float f1 = 4 / 5;
    float f2 = FloatDivision(4, 5);
    cout << "f1 equals " << f1 << endl;
    cout << "f2 equals " << f2 << endl;
    cin.ignore();
}

float FloatDivision(float f1, float f2) {
    if (f2 != 0) {
        return f1 / f2;
    } else {
        cout << "Error: The denominator cannot be zero" << endl;
        return 0;
    }
}

2 个答案:

答案 0 :(得分:3)

4/5是整数除法。您已将它们定义为此类。而在除法函数中,您将它们定义为浮点数。

对于f1,请尝试

float f1 = 4.0 / 5.0;

答案 1 :(得分:2)

如果

settingsHtml = `&nbsp;&nbsp;&nbsp;
    <div class="btn-group chargeability">
        <button type="button" class="btn bg-indigo waves-effect current-schedule-chargeable" data-id="`+d[0][i].id+`" style="width:115px" title="Schedule Chargeable Setting">`+ chargeable +`</button>
        <button type="button" class="btn bg-indigo dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
            <span class="caret"></span>
            <span class="sr-only">Toggle Dropdown</span>
        </button>
        <ul class="dropdown-menu" style="position: relative;z-index: 99999;">
            <li style="background:#f9f5e9;border-bottom:1px solid #ccc"><a href="javascript:void(0);" data-value="1" data-lead="`+d[0][i].lead_id+`" data-id="`+d[0][i].id+`" class="schedule-chargeable waves-effect waves-block">Yes</a></li>
            <li style="background:#f9f5e9"><a href="javascript:void(0);" data-value="0" data-lead="`+d[0][i].lead_id+`" data-id="`+d[0][i].id+`" class="schedule-chargeable waves-effect waves-block">No</a></li>
        </ul>
    </div>`;

这是整数除法,结果为0,然后将其转换为float,并保持为0。

在函数调用DivFloat的情况下,它需要float参数,因此4和5首先转换为float,然后进行除法。因此结果为0.8。