我刚刚开始学习C ++的一些基础知识,但是偶然发现了一个问题。

例如,我正在尝试将摄氏度转换为华氏度。

假设我只有这个固定公式。

F = 9/5(c) + 32


我知道数学上可以将其分解为

Mathematically : (9c/5) + 32


但是,我将无法获得带提示的商

因此,我如何仅使用算术运算符精确地获得带提醒的两个商?

我测试了一下,但仍然拒绝提供正确的输出

#include<iostream>
using namespace std;

int main(){

double f;
int c;

cout<<"Enter degree celcius:"<<endl;
cin>>c;
cout<<endl;

f = 9/5 * c + 32; //incorrect ways for obvious reason
f = 9%5 * c + 32; //incorrect ways for obvious reason

cout<<c<<"degree celcius is equals to:"<<f<<endl;

}

最佳答案

f = 9/5 * c + 32; //incorrect ways for obvious reason



如果您知道这是不正确的“明显原因”,那么您就不会问这个问题!

实际上这是不正确的,因为它使用整数值进行计算。 95c32都是int,并且当您对int进行数学运算时,C ++会将结果作为int给出。因为整数是整数,所以它们没有小数部分,也不能存储余数。

计算完成后,将结果分配给f,即double。尽管浮点类型的小数部分可以存储余数,但是您在这里所做的只是将整数结果转换为浮点值。

您可以认为您的代码等同于:

int result = 9/5 * c + 32;
f = static_cast<double>(result);


为了解决此问题,您需要强制将计算作为浮点数进行:

f = 9.0/5.0 * static_cast<double>(c) + 32.0;


这会将“余数”保留为浮点值f的小数部分。

从技术上讲,您只需要一个中间操作即可产生浮点结果。如果第一个操作产生浮点值,则所有剩余的操作数将被提升为浮点以匹配此初始操作数。因此,您可以简单地执行以下操作:

f = 9.0/5 * c + 32;


9.0是双精度字面量,就像9是整数常量。加小数部分(.x)会将其变成双精度数。如果您编写了9.0f,那将是浮点型立即数。 )

关于c++ - 仅使用算术运算符即可获得余数的商,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38224595/

10-11 06:45