C double型別強制轉換int時,為什麼會有這樣的結果

時間 2021-05-30 15:32:43

1樓:

補充一下 @黃飛飛 的答案, double 型別的0.3的52位尾數恰好是 後面的 因為第53位是0都被捨去. 所以實際的浮點表示比0.3小 .

2樓:lol就是那只熊貓

浮點型儲存的時候由於位數的原因會有精度損失,比如0.3在儲存的時候可能是0.29999999999999,也可能是0.30000000000001這種。

而浮點轉int實際上是捨去的,不是四捨五入。

想避免這種情況,加0.000001然後再轉換為int。

3樓:

用這個網頁,看看你輸入的浮點立即數究竟會被編譯器變成什麼二進位制數存在記憶體裡

IEEE-754 Floating Point Converter然後,已知C++對F2I的規定是扔掉小數部分,對I2F的規定是RTNE

Implicit conversions

你再仔細想想你這段程式,有哪些explicit和implicit的float<->int conversion, 那麼每一步的結果都是啥就確定下來了。

4樓:靈劍

任何乙個講浮點數原理的教材應該都會說得比較清楚吧……十進位制小數有許多都不是二進位制的有限小數,就像1/3用十進位制表示會是個迴圈小數一樣,0.1,0.3用二進位制表示也是迴圈小數,浮點數精度有限,最後會做捨入處理,所以偶爾會大一點,偶爾會小一點,乘以10之後也就比相應整數大一點或者小一點。

我們知道C++裡浮點數轉整形是向0取整,於是比3小一點點也會轉成2,從而有這個現象。

強制型別轉換是否改變變數的位元表示?

Shiwei Wang 嚴格來說,要輸出unsigned short int,format應該是 hd RednaxelaFX 有時候C的cast是會讓bit value發生變化的,例如整型與浮點型之間的轉換。inti floatf float i bitpattern changes 此時要想保持...

C語言中強制型別轉換是如何實現的?

涇渭漳淮 強制轉換時怎麼實現的?通常是由單獨的CPU指令實現的,也就是硬體實現的。5立方之後是125,125開立方之後是幾?嚴格的數學上應該是5,但實際上計算機有精度的限制,計算結果會有誤差,計算機計算得到的結果可能是4.9999999999999435452340065849之類的,將這個值直接取...

對於指標的強制型別轉換,結果會是什麼?

計算機的標量可以理解為只有整型和浮點型兩種型別,整型由CPU的ALU計算,而浮點型由CPU的浮點運算器來運算。大部分整型被實現為補碼,從機器的角度來看,補碼不需要考慮整數的正負,加法原則是一致的。一般只有整型和浮點型進行相互轉換時,CPU才會呼叫轉換的指令更改編碼,其它情況下只是更改對乙個二進位制數...