我刚刚开始学习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
如果您知道这是不正确的“明显原因”,那么您就不会问这个问题!
实际上这是不正确的,因为它使用整数值进行计算。
9
,5
,c
和32
都是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/