強制型別轉換問題 float fint f

2021-08-11 19:14:54 字數 1534 閱讀 1183

1樓:匿名使用者

這個和浮點數是如何儲存的有關係。雖然是1,但是儲存是可能不一定等於1,而是0.99999....

非常接近1的一個數。這個用浮點列印仍舊是1.0000,但是專成int就是0了

2樓:大白兔

首相你這個f應該定義為int 型

其次e,b都是float型,相除也是float型,用強制轉換來實現輸出整數

(f=(int)(e/b);

3樓:匿名使用者

樓主可以執行以下**看看,就可以發現f不是正好為1了.

#include "stdio.h"

main()

4樓:匿名使用者

浮點數和整形的儲存方式不一樣,因為ansi c對 型別的定義不嚴格(也不是不嚴格,它定義的是類似 short<=int<=long)不同的系統或整合環境上也有差異,比如vc把int定為32位,另外一些可能就是16位的

整型的16位中第一位是符號位, 後面15位可以用2進位制容納一個數而儲存float的記憶體單元被劃分為兩塊,比如 150.123前一塊就儲存1.50123 後面那塊是100也就是1.

50123e2 科學技術法的方式當你強制型別轉化的時候 計算機就以整型的方式去讀取一個float的值,所以結果不一定是你想得到的,

另外強制型別轉化有個原則就是 可以從低->高 也就是int到float

但是float-->int 就不一定正確了

5樓:匿名使用者

出現這種奇怪的結果是由於機算機缺乏足夠的進行運算所需的十進位制位數.

例如:將一個數加上1再減去原數,結果為1.可如果用浮點數計算,則有其它結果.

main()

tc 下結果為-13584010575872.000000

其它我沒試.這是因為數字2.0e20為2後面加20 個零,如果對它加1,那麼變化的是第21位,

如果要正確計算,至少需要儲存21位的數字,而float 只有6,7位有效數字.因此這計算肯定是不正確的.如用2.

0e4代替2.0e20,就能得到正確的結果.因為改孌的是第5位,在float 精度內.

另外和浮點數是如何儲存的有關係。雖然是1,但是儲存是可能不一定等於1,而是0.99999....

非常接近1的一個數。這個用浮點列印仍舊是1.0000,但是專成int就是0了

你這韙改動一下.

f=e/b; /*到這裡f正好等於1.0*/

這後面加一句.

f=f+0.000001;

小數點後不能超過6位,超過就又是0 了.

這個0.000001對數字來說是微不足道,可對這題卻是作了證明哦.

給分吧.呵呵

6樓:匿名使用者

h************xd

7樓:守護雨中的風

??應該是1啊,昨天學了這個.好像是1啊

8樓:深圳貴森科技

你把f強制成double的先看看結果,如果不到1的話,那就是樓上的說法對了。

oracle儲存過程轉換型別問題

你的to date 2010 12 30 yyyy mm dd 函式寫錯了,因為減號的優先順序比 高,2010 12 30 得到的是一個4位數,寫成下面這樣就行了 to date 2010 12 1 yyyy mm dd 還有這樣寫雖然oracle寫可以,年月最好寫的規範一點,寫成to date 2...

關於C 中類與內建型別型別轉換的問題

operator double const這句是啥意思?你是想過載 double 操作符?double是一個操作符嗎?能被過載?你是不是這個意思 double operator double a 反正是你這個操作符過載的函式的基本格式就不對。函式的返回值型別在哪?引數列表在哪?這個應該是產生了二義性...

c語言中資料型別的轉換

include stdio.h main 輸出的資料型別不匹配 給你舉個例子吧 j i 實際j值和i一樣 j i,實際j值比i大一 你還沒明白 i 注意它是在i使用後自動加一printf d i 這是兩句命令,執行完i 後才輸出,i值自然 1 j 它是在使用前加一 printf d j 也是兩句命令...