作者flamo (迅雷不及掩耳盜鈴)
看板C_and_CPP
標題Re: [問題] 暈頭轉向的int and float
時間Sat May 22 16:44:44 2010
把結果(型別為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