一些身體幫我就以下問題轉換的CString的浮動
strFixFactorSide = _T("0.5");
dFixFactorSide = atof((const char *)(LPCTSTR)strFixFactorSide);
「dFixFactorSide」取值爲0.0000;
我該如何獲得正確的價值?
一些身體幫我就以下問題轉換的CString的浮動
strFixFactorSide = _T("0.5");
dFixFactorSide = atof((const char *)(LPCTSTR)strFixFactorSide);
「dFixFactorSide」取值爲0.0000;
我該如何獲得正確的價值?
我認爲你的CString strFixFactorSide
是一個Unicode(UTF-16)字符串。
如果是這樣,鑄造(const char *)
只改變指針類型,但它指向的字符串仍然是Unicode。
atof()
不適用於Unicode字符串。如果您將L"0.5"
放入其中,它將讀取字節0x30('0')和0x00(也是UTF-16'0'的一部分),將其視爲NUL終止的ASCII字符串"0"
並將其轉換爲0.0。
如果CString strFixFactorSide
是一個Unicode字符串,您需要首先將其轉換爲ASCII字符串,然後應用atof()
或使用能夠將Unicode字符串轉換爲數字的函數。 _wtof()
可用於Unicode字符串。
使用_tstof()
而不是atof()
,並將CString強制轉換爲LPCTSTR,並保持原樣,而不是試圖將其轉換爲const char *
。在使用unicode時只能使用const _TCHAR *
(LPCTSTR),請忘記const char *
(LPCSTR)。
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
CString s1 = _T("123.4");
CString s2 = _T("567.8");
double v1 = _tstof((LPCTSTR)s1);
double v2 = _tstof((LPCTSTR)s2);
_tprintf(_T("%.3f"), v1 + v2);
return nRetCode;
}
並正確運行這個預期的答案。
我得到錯誤爲「錯誤C2065:'_wtof':未聲明的標識符」。我使用eVC++ 4.0 – Vaibhav
你試過包括'','','',''嗎?其他人嘗試:'wcstod()'或'swscanf()'。 –
我得到如下解決方案「_stscanf(strFixFactorSide,_T(」%lf「),&dFixFactorSide);」但這是正確的方式嗎? – Vaibhav