如何在大型C++程序中爲所有double
型精度使用精度設置精度。如何在大型C++程序中爲所有雙精度型數字設置小數精度
我可以使用stringstream
和setprecision(n)
來做到這一點,但我必須在整個程序中每double
一個一個地做。
如何在全局範圍內進行一次全部操作,以便程序中的所有double
型號在小數點後都有固定的十進制數字(例如4
)?
我不想使用函數調用導致調用開銷。
感謝
如何在大型C++程序中爲所有double
型精度使用精度設置精度。如何在大型C++程序中爲所有雙精度型數字設置小數精度
我可以使用stringstream
和setprecision(n)
來做到這一點,但我必須在整個程序中每double
一個一個地做。
如何在全局範圍內進行一次全部操作,以便程序中的所有double
型號在小數點後都有固定的十進制數字(例如4
)?
我不想使用函數調用導致調用開銷。
感謝
setprecision
不會改變雙值的精度,但只是當轉換成字符串使用的精度。
將雙打轉換爲字符串是相對昂貴的操作,因此單個額外函數調用的開銷應該可以忽略不計。如果你在性能關鍵代碼中使用雙字符串轉換,那麼你做錯了。
我的建議是隻寫一個函數,例如:
std::string FmtDbl(double d)
{
std::ostringstream os;
os << std::setprecision(4) << d;
return os.str();
}
,並使用該功能無處不在您需要的轉換。
謝謝,但你的函數也需要做雙重字符串轉換,然後我需要將字符串轉換爲函數返回值的兩倍。它也有通話費用。爲什麼你的功能更有效率?謝謝 – user1002288
double
類型不是爲了做你想做的事情而設計的:它是一個浮點十進制類型,不是一個固定的十進制類型。你需要的是某種十進制類型,但不幸的是C++還沒有這種類型。
它可以用整數類型模擬大多數時間,假設它代表單位的千分位數。你必須小心乘法和除法來解決這個問題。加法和減法自動工作。
http://www.trenki.net/content/view/17/1/,http://drdobbs.com/cpp/184401992?pgno=1,或者推出自己的。它並不特別棘手。 –
正如我以前回答,你不能改變雙精度:它是它是什麼。所以恐怕我不明白這個問題。你想截斷一個double值到第四個小數位嗎?或者你是否想要定義一個類似雙精度型但有4個固定小數位的類型? – rodrigo
我想要以後。所以,我使用了stringstream和setprecision和<<運算符。我知道如何去做。但是,我不明白爲什麼你的功能比我所做的更有效率? – user1002288
這不是更有效率,請參閱我的新答案。 – rodrigo