我正在尝试执行一项操作,该操作将从用户的直径输入中找到多个披萨片(家庭作业),但我的问题是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的常量整数,sliceNumber
和sliceDiameter
都被声明为双精度数。 sliceArea
被声明为14.125的int。
答案 0 :(得分:3)
如果sliceArea
是int
,则值为14,而不是14.125。同样,如果pi
是int
,则值为3,而不是3.14。不巧的是,(3 * pow(10 / 2.0, 2.0)) / 14
来到5.357...
,它将以两位数的精度舍入到5.4
。您需要将这些值声明为double
(或float
),否则您的编译器将截断小数值以获得int
。