如何在操作过程中防止小数舍入?

时间:2016-09-30 06:56:33

标签: c++ floating-point

我正在尝试执行一项操作,该操作将从用户的直径输入中找到多个披萨片(家庭作业),但我的问题是c ++在操作过程中保持四舍五入。这是代码

//Calculates the number of slices that can be obtained using the diameter from the user's input
    sliceNumber = (pi *(pow((pizzaDiameter/ 2.0 ) , 2.0 ))) / sliceArea;

//Outputs the number of slices that can be cut, accurate to 1 decimal point using the command "setprecision"
    cout << "The number of slices your pizza can be divided into is ";
    cout << setprecision(2) << sliceNumber << endl;

最终结果应舍入到一个小数位,这是正确的,因为它是用setprecision强制的。但是当我用计算器自己解决问题时,结果有点不同。例如,我将在程序中输入直径为10,它将输出5.4,即使在实际计算器上它是5.6。 (通过找到比萨饼的面积然后除以14.125找到切片的数量,用sliceArea声明)

pi被声明为3.14的常量整数,sliceNumbersliceDiameter都被声明为双精度数。 sliceArea被声明为14.125的int。

1 个答案:

答案 0 :(得分:3)

如果sliceAreaint,则值为14,而不是14.125。同样,如果piint,则值为3,而不是3.14。不巧的是,(3 * pow(10 / 2.0, 2.0)) / 14来到5.357...,它将以两位数的精度舍入到5.4。您需要将这些值声明为double(或float),否则您的编译器将截断小数值以获得int