看板 C_and_CPP 關於我們 聯絡資訊
把結果(型別為double)先轉成int, 此時小數點之後的會被捨棄. 再跟原本的結果比較. 如果相等, 則小數點後面沒東西, 用"%d"輸出; 反之用"%f"輸出. 範例: const char a[] = "1.3"; const char b[] = "2"; double result = atof(a) * atof(b); bool hasPoint = result != (double)(int)result; if (hasPoint) printf("%f\n", result); else printf("%d\n", (int)result); ※ 引述《suscym (DoDreamEr)》之銘言: : 遇到的問題: : 我預設讀Input的變數格式都是string (原則上數字都是非float為主) : 但是程式中難免會計算 (可能會因此產生float) : 於是要先從string 轉 int ==> float tmp = atof( str ) ; : /* aotf()會自動發現str是整數或是浮點數來處理 : ( ex: string -> float : 122 -> 122 : 222.33 -> 222.33 : ) : */ : 但是接下來計算完 要轉回字串時就發現問題了 : sprintf( str, "%f", atof(str) * atof(str2) ); : // 希望是如果是完全整數 就沒有後面小數點;是浮點後面就會有 : 但是最後答案發現 無論解答有無浮點 後面都會有~~~.XXX : ( ex: 200 * 2 --> 400.000 ( str ) ) : 如果設定精準度 那萬一答案是浮點 恐怕又會影響答案 : 希望得到的正確結果: : 能夠像atof()一樣會依照不同型別做處理 : 但是規定轉回字串一定要用sprintf() 不可用其他 : (另一種好像不是標準函式庫的東西) : 程式跑出來的錯誤結果: : 希望是整數時 就不要有小數點後的東西 : 是浮點時 才要有後面 : 開發平台: VC, Windows : 請大家多多指教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.24.154.142
Dreamer77:建議result 宣告成float 05/22 17:30
suscym:十分感謝 沒想到有這招XD 3Q 05/24 16:24