华氏温度到摄氏温度错误

时间:2019-01-21 06:53:31

标签: c++ xcelsius

我是软件开发的学生,我需要从华氏转换为摄氏,但是我的代码计算错了。 这是我的代码:

int main() {
    // configure the out put to display money
    cout.setf(ios::fixed);     //no scientific notation
    cout.setf(ios::showpoint); //show decimal point
    cout.precision(0);         //two decimal for cents

    int fahrenheit = 0 ;
    int celsius = 5/9*(fahrenheit-32);

    cout << "Please enter Fahrenheit degrees:  ";
    cin >> fahrenheit ;

    cout << "Celsius:  " <<  celsius << endl;

   return 0;
}

3 个答案:

答案 0 :(得分:2)

您的公式使用的是int:5/9表示您将精度降低了一些,将5更改为5.0,或者如果您想将摄氏度更改为浮动

答案 1 :(得分:2)

您的代码中有四个错误。

1)要点是要认识到计算机按照您要求的顺序进行操作。显然,正确的顺序是:a)要求用户输入温度b)将其转换为摄氏度。但是您的代码却相反。这是您的代码,上面有我的一些注释

// convert fahrenheit to celcius
int celsius = 5/9*(fahrenheit-32);

// ask user to enter fahrenheit temperature
cout << "Please enter Fahrenheit degrees:  ";
cin >> fahrenheit ;

希望现在很明显,您对事物的看法是错误的

2)第二个错误是您为变量选择了错误的 type 。温度不是整数(例如,温度为80.5度没错)。因此,您应该为变量选择浮点类型float是一种可能。

3)第三个错误是非常技术性的,但很重要。在方程式中,您写了5/959都是整数,因此计算机将执行整数除法,这意味着计算机将要除以除法结果的小数部分而剩下的整数。因此,数学上5/90.555555...,除去小数部分就剩下0,因此您的方程式与0*(fahrenheit-32)相同,显然不会给出正确的结果。使用5.0/9.0代替5/9可以得到浮点除法

4)最终错误很简单

cout.precision(0);         //two decimal for cents

如果您想保留两位小数位,应该

cout.precision(2);

最后,这不是错误,但是关于金钱的评论在有关温度的程序中不合适。

这是修正了这些错误的代码版本

int main() {
    cout.setf(ios::fixed);     //no scientific notation
    cout.setf(ios::showpoint); //show decimal point
    cout.precision(2);         //two decimal places


    float fahrenheit;
    cout << "Please enter Fahrenheit degrees:  ";
    cin >> fahrenheit;

    float celsius = 5.0/9.0*(fahrenheit-32.0);
    cout << "Celsius:  " <<  celsius << endl;

   return 0;
}

我敢肯定您对一个简短的程序会犯这么多错误感到惊讶。它只是强调在编写代码时必须小心且精确。

答案 2 :(得分:1)

如果必须使用int,则应在最后一步执行除法,以减少int类型的精度损失。但是请记住,这可能会导致int溢出(对温度来说应该不是问题...)

#include <iostream>
using namespace std;
int main() {
    // configure the out put to display money
    cout.setf(ios::fixed);     //no scientific notation
    cout.setf(ios::showpoint); //show decimal point
    cout.precision(0);         //two decimal for cents

    int fahrenheit = 0 ;

    cout << "Please enter Fahrenheit degrees:  ";
    cin >> fahrenheit ;
    int celsius = 5*(fahrenheit-32)/9;
    cout << "Celsius:  " <<  celsius << endl;

   return 0;
}