Float没有正确转换

时间:2015-06-25 11:42:51

标签: c floating-point floating-accuracy

我正在制定一项将美元兑换成美分的计划。我使用预定义函数将用户输入作为浮点数接收,然后我尝试将此浮点数乘以100,但它给出了一个不正确的值。下面是代码:

{{1}}

这是一个逻辑错误,因为程序运行正常,但数学有问题,例如,如果我在提示时输入1.50,我得到的回报是1004,这显然是错误的。我想要发生的是150输出。

1 个答案:

答案 0 :(得分:2)

这很可能是因为您有一些小数点分隔符为,而不是.的区域设置,并且因为您很可能不会检查scanf()&#34的返回值; 这是大多数书籍所做的,几乎每个教程",然后变量没有被初始化,你打印的是你的程序布局的结果,而不是由inputed by用户。

为了验证我说的内容,我建议不加修改地编译同一个程序,但使用不同的编译标记。

你必须做的是确保输入正确,试试这个

float GetFloat(int *ok)
 {
    float value = 0;
    if (scanf("%f", &value) != 1)
        *ok = 0;
    else
        *ok = 1;
    return value;
 }

你会这样称呼

int   result = 0;
float change = GetFloat(&result);
if (result == 0)
    return -1;
float cents = round(change * 100);

printf("Cents is %f",cents);

如果小数点分隔符存在问题,则上述程序不会输出任何内容,因为scanf()将返回0,因此ok将在您0后输出void功能。

忽略非scanf()函数的返回值的一个重要结果是,如果未使用operator >>初始化该值,并且您不知道因为您没有检查返回值,然后会出现未定义的行为,这意味着您的程序将包含很难找到的错误,因此很难修复。