作者pcion (海蛇)
看板C_and_CPP
標題[問題] 浮點數位數的存取(求救)
時間Fri Dec 3 00:16:14 2010
C++的語法
請問大大要如何控制變數存取小數的位數?
例如:
int a,b;
cin>>a;//a輸入3.14159好了
接下來我該如何將a丟到b中只留下3.14
b=(?)a //b這時候是3.14
請教各位大大我該如何做?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.253.109.40
推 purpose:int a 怎麼輸入3.14159... 12/03 00:17
→ tropical72:double a; cin >> a; cout << setprecision(2) << a; 12/03 00:17
→ tropical72:去查表頭檔 iomanip 裡面有什麼東西 12/03 00:18
→ pcion:type打錯了 用float,double隨便 我沒有打算要cout出來 12/03 00:20
→ pcion:請問有沒有別的方式| 12/03 00:20
→ james732:話說回來,3.14可以存得很精確嗎...? 12/03 00:21
→ pcion:就是不需要太精確 12/03 00:22
推 purpose:a = a*100.0; int c = (int)a; a = c / 100.0; 我不確定 12/03 00:22
→ tropical72:你似乎是需要 floor, ceil 之函數. 12/03 00:23
→ pcion:那假設今天我並不知道a小數會到第幾位這樣就不能直接用*100 12/03 00:23
→ loveme00835:float pi = 3.14159; float b = (int)(pi*100)/100.0; 12/03 00:24
→ tropical72:另就是 p 大方式,那是無條件捨去,四捨五入可參考: 12/03 00:25
→ tropical72:a=a*100+0.5, 其餘方式均和 p 大同. 12/03 00:25
→ pcion:p 大的方式我看懂了 這方法還不錯 感謝!!! 12/03 00:26
→ loveme00835:Orz 我打完才發現慢2分 12/03 00:27
推 loveme00835:另外不知道位數的話去參考浮點數的儲存格式, 用 and F 12/03 00:29
→ loveme00835:FF000 之類的遮罩把存小數的部分濾掉即可 12/03 00:30
推 purpose:仔細想想,比如十進位 123.0 / 100.0 得到的 1.23 不管怎 12/03 00:31
→ purpose:樣用IEEE-754存二進位時,都只能得到近似值,不能精準。 12/03 00:31
→ james732:其實這就是我在六樓提的問題 不過原po好像不太在意 XD 12/03 00:32
→ stupid0319:用char陣列偽裝浮點數可以嗎 12/03 00:39
推 purpose:如果要到第二位,a就*1000算出整數1229,轉換成1230,輸出 12/03 00:41
推 cooper6334:我會考慮把a sprintf到陣列中,再轉成b 12/03 00:42
→ purpose:結果時,別再用浮點數,用字串印出 1.23,這樣大概可行吧? 12/03 00:42
→ james732:原po又說他不輸出 所以還是要看用途了? 12/03 00:45
→ stupid0319:很多事情不是現成的API就能做到的吧 12/03 00:57
推 potter1529:FloatToStr( , , ) XD 12/03 01:35