似乎无法输出小数位

时间:2014-08-31 14:26:21

标签: c++

我正在尝试学习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岁。

谁能告诉我为什么?

1 个答案:

答案 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;