客观c浮动值

Mau*_*lik 6 c objective-c

为什么我们不能将两个整数的除法结果存储到float变量中?

int a = 100;
int b =50;
float temp = b/a;
Run Code Online (Sandbox Code Playgroud)

它给出了t = 0!

我也这样做了

int temp = b/a;
Run Code Online (Sandbox Code Playgroud)

它给出了t = 0!

但是当我这样做的时候

float temp = (float)b / (float)a;
Run Code Online (Sandbox Code Playgroud)

它给出了正确的结果.为什么这样 ?

aro*_*oth 22

赋予0.5的float temp = b/a;同时float temp = (float)b/a;给出0.5 的原因是编译器基于操作数的类型而不是目标存储类型来确定除法运算的输出类型.简单地说:

int   /   int = int
float /   int = float
int   / float = float
float / float = float
Run Code Online (Sandbox Code Playgroud)

因此,当您执行float temp = b/a;整数除以ba,然后将结果整数(在您的示例中为0)存储到类型的变量中时float.本质上,当值转换为浮点时,您已经丢失了所需的信息(假设您想要进行浮点除法),并且转换不会将其恢复.

为了得到你想要的结果(再次假设你想要进行浮点除法),你需要float 除法之前至少转换一个操作数.