簡體   English   中英

投放時遇到問題:(int)

[英]Having trouble with casting: (int)

我有2個x和y雙打。 當我除以x / y時,我沒有得到我希望得到的結果。

這是我在c中使用的printf命令以及得到的輸出:

命令:

printf("%3.10f %3.2f %3.12f %d\n",x,y,x/y,(int)(x/y));

輸出:

1.0000000000 0.10 10.000000000000 9

對我來說,x / y應該是10,所以不確定為什么(int)(x / y)產生9而不是10。

有人可以幫我理解這個問題的原因嗎?

x/y結果略小於10(肯定小於10 ^ -12,否則其他結果將不會顯示為10.000000000000),這可能是由於通常的浮點數學舍入錯誤所致。

printf舍入到所需精度的位數,但是到int的轉換是一個殘酷的截斷,因此,即使它是9.99999999999999 ...,您也得到9。

發生這種情況是因為您要截斷小數部分。 四舍五入,你應該沒事。

printf("%3.10f %3.2f %3.12f %d\n",x,y,x/y,round(x/y));

轉換為int不能將double舍入到最接近的整數。

查看C ++中float的round()以獲得詳細信息

暫無
暫無

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

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