簡體   English   中英

客觀c浮動值

[英]objective c float values

為什么我們不能將兩個整數的除法結果存儲到float變量中?

int a = 100;
int b =50;
float temp = b/a;

它給出了t = 0!

我也做到了

int temp = b/a;

它給出了t = 0!

但是當我這樣做的時候

float temp = (float)b / (float)a;

它給出了正確的結果。 為什么這樣 ?

float temp = b/a;的原因float temp = b/a; 給出0而float temp = (float)b/a; 給出0.5是編譯器根據操作數的類型而不是目標存儲類型確定除法運算的輸出類型。 簡單地說:

int   /   int = int
float /   int = float
int   / float = float
float / float = float

所以當你做float temp = b/a; 你在ba整數除法中,然后將得到的整數(在你的例子中為0)存儲到float類型的變量中。 本質上,當值轉換為浮點時,您已經丟失了所需的信息(假設您想要進行浮點除法),並且轉換不會將其恢復。

為了得到你想要的結果(再次,假設你想要進行浮點除法),你需要除法之前將至少一個操作數強制轉換為float

int a = 100;
int b =50;
float temp = (float)b/a;

它的整數除法 - 50/100為0,余數(可以使用模數)為50。

您將需要使用浮點數,無論您是從int轉換還是從它們開始都取決於您。

下面的語句表示,您在啟動操作之前將整數值轉換為float

float temp = (float)b / (float)a;

所以可以看作如下

float temp = (float)50 / (float)100;

然后

float temp = 50.0 / 100.0 ;

結果

temp = 0.5;

在你的情況下,50/100是0.2。 通過獲得兩個整數的結果,結果也將是整數形式,因此它截斷小數部分,僅給出0。 但是在浮動的情況下,它被認為是一個浮動分區,所以你會得到0.2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM