我刚刚开始学习一些C ++的基础知识,但我偶然发现了一个问题。
例如,我试图将celcius转换为华氏度。
假设我只有这个固定的公式。
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;
}
答案 0 :(得分:4)
f = 9/5 * c + 32; //incorrect ways for obvious reason
如果你知道“明显的原因”,为什么这不正确,你就不会问这个问题了!
它实际上是不正确的,因为它使用整数值进行计算。 9
,5
,c
和32
都是int
s,当您使用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
)就是把它变成一个双字母。如果你写了{ {1}},这将是一个浮点文字。)
答案 1 :(得分:3)
文字9
和5
都有int
类型,因此表达式9/5
也会生成int
类型的值。这意味着向零舍入,因此产生值1
。
基本上,要获得您期望的结果,您需要使用浮点。
例如;
f = 9.0/5.0*c + 32;
9.0
和5.0
都属于double
类型,因此除法会生成double
类型的结果(等于1.8
)。由于1.8
的类型为double
,因此c
会在执行乘法之前提升为double
。乘法的结果是double
类型,因此32
在添加之前也会被提升为double
。
答案 2 :(得分:2)
从
中获取浮点数9/5 * c + 32
然后,除法的一个值需要是浮点字面值。这将导致除法的结果为浮点值,这反过来将导致表达式的其余部分为浮点值。我们可以使用
来做到这一点f = 9.0/5 * c + 32;
添加.0
会导致文字成为double
,而不是int
。
答案 3 :(得分:1)
你的因素是整数,所以结果将是一个int。
而不是9/5 * c + 32
尝试9.0/5.0 * c + 32
您可能还想将c声明为double。
答案 4 :(得分:0)
获得除法运算的商和余数不会帮助你计算相当于摄氏温度的华氏温度,但一般来说,商和余数可以这样计算:
int dividend = 123;
int divisor = 5;
int quotient = dividend / divisor; // integer division
int remainder = dividend % divisor; // use modulo operation to get remainder
cout << "quotient = " << quotient << ", remainer = " << remainder << endl;
# quotient = 24, remainer = 3
将华氏温度变为双倍:
double fahrenheit = 9/5.0 * c + 32; // uses floating point division
使用5.0
强制使用浮点进行计算。