我有下面的代碼snipppet。CString。格式問題
double db = 1/1000000;
CString csStr("";
csStr.Format('%.10f',ct);
基本上的db
值爲0.000001
。
我需要將此值存儲爲csStr
。
MFC VC++中的格式語句是否正確?
另外,db
可以是1/100
或1/100000000000
。
我不能在csStr
中存儲trucated值或四捨五入的值。那可能嗎?
我有下面的代碼snipppet。CString。格式問題
double db = 1/1000000;
CString csStr("";
csStr.Format('%.10f',ct);
基本上的db
值爲0.000001
。
我需要將此值存儲爲csStr
。
MFC VC++中的格式語句是否正確?
另外,db
可以是1/100
或1/100000000000
。
我不能在csStr
中存儲trucated值或四捨五入的值。那可能嗎?
你有兩個問題需要解決這裏:
所以你問的是不可能的,一般來說。
現在,您所詢問的值有一個精確的有限小數位數,十進制表示形式(但並非所有這些都是精確的FP表示形式),並且感謝CString :: Format舍入函數,您如果你做得很好,最有可能得到存儲在csStr中的正確值。
您的代碼具有一定的問題(校正,使得它編譯):
double db = 1/1000000; // [1]
CString csStr(""); // [2]
csStr.Format("%.10f", db); // [3]
[1]這存儲在分貝0.0。它將整除計算爲0,然後將其轉換爲雙精度。代替double db = 1.0/1e6;
(或1.0/1000000)。
[2]你不需要初始值設定項。 CString被初始化爲空字符串
[3]這會在字符串中存儲「0.0000010000」。
如果您不想要尾隨零,請將「%lf」寫爲格式。
根據文檔,「該值四捨五入到合適的位數」。如果精度足夠了,你會得到正確的數字,但是如果你沒有足夠的精度(例如,如果你指定精度爲6,數字爲0.00000001),或者有零結尾達到指定的精度。
那該怎麼辦?就你而言,你說你會有1/100或1/100000000000。如果這是真的(你只能擁有這兩個值),並且它不會改變(這將取決於你在做什麼,但我不會相信這一點),你可以存儲除數,然後創建字符串在飛行中,與if
什麼的。
您也可以使用「%g」格式規範。它也完成四捨五入,但它刪除任何尾隨的零。警告(或好東西,取決於你在做什麼)是它可以(並且將)以「1e-6」格式放置一些值。