4

简单的 c++ 问题,如您所见,它创建了一个表并输入变量 a 和变量 t 答案,问题是我不知道如何修复if (). 如您所见,它有一个错误(错字)。我不知道如何识别变量 t 是否有示例:1或者1.5,如果数字有 1.(这里的东西,它大于数字。1)然后调用一个条件,否则调用另一个。

int a,b = 18;
double t;

for (a = 0; a <= b; a++)
{
    t = 8 + (double)(18 - a) / 2;
    if (t >= *.1)
        cout << setw(9) << a << setw(20) << fixed << setprecision(1) << t << endl;
    else
        cout << setw(9) << a << setw(20) << t << endl;
}

试过:

#include <iostream>
#include <iomanip>
#include <cmath>
#include <math.h>

using namespace std;
int main ()
{
    int a,b = 18;
    double t;

    for (a = 0; a <= b; a++)
    {
        t = 8 + (double)(18 - a) / 2;
        if (modf(t, NULL) >= 0.1)
        cout << setw(9) << a << setw(20) << fixed << setprecision(1) << t << endl;
         else
            cout << setw(9) << a << setw(20) << t << endl;
    }

}

以我自己的方式修复,仍然感谢 'Angew' 他是第一个发布 modf() 的人:

#include <iostream>
#include <iomanip>
#include <cmath>
#include <math.h>

using namespace std;
int main ()
{
    int a,b = 18;
    double t,z;
    int k;

    for (a = 1; a <= b; a++)
    {
        t = 8 + (double)(18 - a) / 2;

        if (modf(t, &z) >= 0.5)
        cout << setw(9) << a << setw(20) << fixed << setprecision(1) << t << endl;
         else
            k = t;
            cout << setw(9) << a << setw(20) << k << endl;
    }
}
4

3 回答 3

4

你也许在寻找std::modf

double wholePart;
if (std::modf(t, &wholePart) >= 0.1)
于 2013-05-08T14:15:59.537 回答
2

您是否尝试过使用模数而不是除法?(% 符号)这将返回您的操作的其余部分。

double x = 1.1;
x = x % 1.0;
//x is equal to .1

查找您的数字和 1 的 mod 将返回小数余数,因此将您的 if 语句更改为:

if (t % 1.0 >= 0.1)
于 2013-05-08T14:19:46.973 回答
1

这将找到您的数字的小数部分:

double num = 23.345;
int intpart = (int)num;
double decpart = num - intpart;
//decpart = .345

正如 BoBTfish 提到的,这可能会成为大小数的问题。另一种可能的(安全)解决方案是:

double integral;
double fractional = modf(some_double, &integral);

有了这个,你的 if 变成了..

if(t_decpart >= .1)
    //
于 2013-05-08T14:11:03.137 回答