2016-09-30 55 views
-2

我试图执行一个操作,将从用户的直径输入中找到一些披萨片(家庭作业分配),但我的问题是,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的整数。

+5

* pi被声明为3.14的常量整数*什么!我从你的问题推断你是初学者。如有必要,请在教程中向前跳至解释整数和浮点数之间差异的页面。或者如果您阅读该页面的速度太快,请跳过。 –

+3

在强类型语言(如C++)中发布一个关于“为什么不提供预期结果”的问题,但在示例代码中不包括类型声明,这意味着问题不清楚。每个变量的确切类型是任何C++代码示例的关键部分。在散文中陈述他们的类型是不够的,因为我们不能确定你的意思是说你的意思,而是真正地说出你的意思。 – DevSolar

回答

3

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

+0

注意:我希望大多数编译器会警告您将'const int'定义为等于'double'文字;你可能想要在你的编译器上调出警告级别,或者注意它给你的警告。 – ShadowRanger