我正在制作一个简单的计算器,您可以选择一个功能,然后输入2个来获得答案。这是一个简洁的小程序,除了权力之外,一切都运行顺畅。每个号码都能正常工作。
但根据这个:5^2=24, 5^3=624
。我正在使用pow(number1,number2)
。
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
for(;;){
int func;
int number1;
int number2;
cout << "Input your function (+,-,x,/,Square,Power)(1,2,3,4,5,6) ";
cin >> func;
cout << "input #1: ";
cin >> number1;
cout << "input #2: ";
cin >> number2;
if (func==1){
int answer;
answer = number1 + number2;
cout << number1 << " + " << number2 << " = " << answer << endl;
}
else {
if (func==2){
int answer;
answer = number1 - number2;
cout << number1 << " - " << number2 << " = " << answer << endl;
}
else {
if (func==3){
int answer;
answer = number1 * number2;
cout << number1 << " x " << number2 << " = " << answer << endl;
}
else {
if (func==4){
int answer;
answer = number1 / number2;
int R = number1 % number2;
cout << number1 << " / " << number2<< " = " << answer << " R "<< R << endl;
}
else {
if (func==5){
int answer;
answer = pow(number1,0.5);
cout << "√" << number1 << "=" << answer << endl;
}
else {
if (func==6){
int answer;
answer = pow(number1,number2);
cout << "√" << number1 << "^" << number2 << "=" << answer << endl;
}
}
}
}
}
}
}
}
答案 0 :(得分:7)
pow()
将数字作为浮点返回。真正回归的是24.99997或类似的东西。但是你通过将它分配给一个整数来截断它并且它出现为24.在这种情况下可以分配给一个整数,因为你知道答案将永远是一个整数所以你需要对它进行舍入 - 而不是截断它。舍入为整数的常规方法是添加0.5,如下所示:
int answer;
answer = pow(number1,number2)+0.5;
另一方面,平方根可能不应该分配给一个整数 - 几乎每个平方根都有小数位。
答案 1 :(得分:1)
int answer;
^^^
answer = pow(number1,number2);
pow()
函数会先将number1
和number2
转换为float
。请注意,浮点计算并不精确,这意味着您可能会得到一个值24.999999
而不是精确的25
。在计算之后,它会将结果转换为int
,这将切断浮动部分(例如24.999999 => 24
)。
尝试使用float
来捕获结果:
float answer;
answer = pow(number1,number2);
如果您确实希望将结果存储到int
,则应正确对其进行舍入:
int answer;
answer = (int) (pow(number1,number2) + 0.5);
要继续阅读,请查看What Every Programmer Should Know About Floating-Point Arithmetic。
答案 2 :(得分:0)
请尝试使用double answer;
。 pow
返回一个浮点数,你正在对int
进行隐式转换。这将导致你看到的行为。