簡體   English   中英

為什么我的花車堅持要保持整數?

[英]Why do my floats insist on staying integers?

我正在閱讀幾個整數,代表年份,朱利安日,小時和分鍾。 我試圖將它們轉換為分數天。

int YYYY, JJJ, HH, MM;

float datenumber = (YYYY*360.0f)+(JJJ*1.0f)+((HH*1.0f)+(MM/60.0f))/24.0f;

使用724043.939的值2001, 083, 22, 32我應該得到724043.939的結果。 相反,我得到724044

我把所有的投注作為花車。 為什么他們保持整數?

編輯是的,我正在用cout顯示輸出。 setprecision解決了這個問題,謝謝。

問題不在於您的號碼或計算中。 它只是在你顯示它的方式。 cout決定6位數就足夠了。 如果您想要更多,請使用setprecision

std::cout << std::setprecision(10) << datenumber;

演示

你需要做件事:

  1. 將精度設置為最大值( cout.setprecision(16)
  2. 轉換為doubledouble dateNumberYYYY*360.0

除非你有更多的代碼可以在其他地方進行投射,否則你在完成等式之后就會進行投射,所以你得到一個浮點數,但是在你的投射之前使用等式中的int來減去小數。

為什么不最初將它們聲明為浮動?

float YYYY, JJJ, HH, MM;

以下可能是原因 - 1.可能是你錯誤地打印它們。 2.除以整數,使用float代替。

示例 - 而不是除以200除以200.0

從本傑明答案中提供的示例中的輸入和輸出值來判斷,我願意打賭這個問題只是浮點精度。 僅僅因為你將某些東西聲明為浮點數,並不意味着它可以處理任何大小的數字。 問題在於您的年份組件(1200 * 360 = 432000)比您的MM組件(5/60/24 = .00347222)大。 MM部分的小數部分被忽略,因為浮點數不准確。 嘗試將.000001添加到123456789作為浮點數並查看輸出結果

暫無
暫無

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

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