我正在尝试学习C ++,我刚刚开始学习,但我写了以下内容:
#include "stdafx.h"
#include <iostream>
#include <iomanip> // for setPrecision()
#include <cmath>
int getVal()
{
using namespace std;
int value;
cin >> value;
return value;
}
char getChar()
{
using namespace std;
char mathOperator;
cin >> mathOperator;
return mathOperator;
}
double doCalc(int a, int b, char mO)
{
using namespace std;
cout << a << mO << b << " = ";
double result;
switch(mO)
{
case '+': result = a+b; break;
case '-': result = a-b; break;
case '*': result = a*b; break;
case '/': result = a/b; break;
}
cout << setprecision(20);
cout << result << endl;
return result;
}
bool isEven(double x)
{
if(fmod(x,2)) {
return false;
} else {
return true;
}
}
int main() {
using namespace std;
cout << "Playing with numbers!" << endl << endl;
cout << "Enter a value: ";
int a = getVal();
cout << "Enter another value: ";
int b = getVal();
cout << "Enter one of the following: (+, -, *, /)";
char mathOperator = getChar();
double result;
result = doCalc(a,b,mathOperator);
switch(isEven(result))
{
case true: cout << "Your number is even." << endl; break;
case false: cout << "Your number is odd." << endl; break;
}
return 0;
}
我知道这很简单,但由于某些原因在函数doCalc()中我似乎无法输出小数位。我使用过setprecision,但没有区别。我测试的数字是100/3,应该是33.33333333333333333333333333。我只得到33岁。
谁能告诉我为什么?
答案 0 :(得分:2)
让我们看看一些简单的代码:
std::cout << 4 / 3 << std::endl; // Outputs the integer 1
std::cout << 4.0 / 3 << std::endl; // Outputs the double 1.3333333333
Integer / Integer给出一个舍入为零的整数结果。
如果你传递一个浮点数或一个双精度数(注意4.0,这是一个双精度数),那么你会得到小数位。
在您的特定情况下,我建议:
case '/': result = static_cast<double>(a) / b; break;
或:
case '/': result = (double) a / b; break;