Re: [問題] 預設的 double -> int 隱式轉換或強制轉換
※ 引述《lytn (sapphira)》之銘言:
: 經過我自己測試的結果,
: 在Dev-C++ 或是VC++裡測試
: double a=4.9;
: int b=a; //or int b=(int)a;
: cout b; << b會等於
: 好像就是直接捨位了.想知道這是C++的標準預設嗎?
: 在C裡面 math.h 還有提供 ceil() ,floor()來做進位跟捨位
: 但是我書上寫的這兩個函式的傳回值都是double,
: 如果真的要整數的話,勢必還要轉型,所以才會在意到底是轉成怎麼樣的.
: 或是有沒有可靠的預設函式可以直接拿到整數的?
: 另外我是自己做一個ceil函式啦,也想知道這樣搞跟#include<cmath> 之類的哪個比較快,
: 因為我真的沒有用很多cmath,math.h 裡的東西.
double 轉 整數, 就單純的 truncate.
這是標準, 不用擔心.
: int IntUp(double adouble){ //無條件進位
: int tempint;
: tempint=adouble;
: if(tempint<adouble){return (tempint+1);}
: else{return tempint;}
: };
: int Int_4_5(double adouble){ //四捨五入
: if(adouble>0){
: int temp=IntUp(adouble);
: if((temp-adouble)<0.5){
: return temp;
: }
: else{
: return temp-1;
: }
: }
: }
四捨五入比較單純一點, 只要
int rounding(double val) { // 要留心 int 的 range 比 double 少
return (int) (val + 0.5);
}
就夠了
無條件進位比較複雜一點. (其實四捨五入視乎情況也
應該考慮一樣的問題, 不過沒那麼明顯而已)
因為 浮點數 (double/float) 只是大約數.
剛好 12 的無條件進位, 一般人會覺得應該仍然要維持 12,
可是 12 在 memory 中可能是 12.000000000000001,
單從數值上看, 是 12點幾, 又該需要進位.
這種情況你要定義你程式的最小計算單位, 再以此 adjust
你的數值. 比如你知道你的程式最多只會去到小數後4 位,
你可以:
const double EPSILON = 0.00001;
int ceil(double val) {
return (int) (val - EPSILON + 1.0);
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
※ 編輯: adrianshum 來自: 202.155.236.82 (04/28 12:09)
推
04/28 12:37, , 1F
04/28 12:37, 1F
推
04/28 12:47, , 2F
04/28 12:47, 2F
→
04/28 12:51, , 3F
04/28 12:51, 3F
→
04/28 16:02, , 4F
04/28 16:02, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章