2016-12-07 66 views
3

atof()返回一個double,當我將它賦值給一個浮點值(並且是的,我明確地必須使用float)時會產生警告。atof()for float而不是double

所以我的問題:是否有一個atof() - 變量可用返回一個純浮點數?或者我必須通過演員來解決這個問題 - 這很遺憾,因爲它會浪費資源來創建一個會立即拋棄的雙重資源。

+3

真的沒關係。如果將結果賦給一個變量,那麼不管你是否使用它,都不會使用更多的內存,並且編譯器可能會有一些很好的優化函數,這些函數都可以忽略不計。不要做過早的優化,首先集中精力編寫好的可讀和可維護的代碼。 –

+2

除非你在一個帶有軟件浮點的嵌入式平臺上,否則你的CPU很可能將所有浮點值存儲在雙倍大小的寄存器中。 – Art

+1

爲了記錄,我在看這個問題,因爲我在一個嵌入式平臺上使用硬件單精度和軟件雙精度浮點數。 – ojs

回答

2

改爲使用strtof,它將返回一個浮點數。

See documentation here

+2

問題標記爲[ansi-c]。根據[此參考資料](http://en.cppreference.com/w/c/string/byte/strtof),在C99中增加了「strtof」,因此您在編譯器上是否存在該功能。 (順便說一下,www.cplusplus.com是一個C語言問題的參考資料) – user694733

0

如果平臺有直接的「字符串浮動」轉換例程和編譯器的優化,一定會打電話經由轉換例程:

char *buf = ... 
float y; 
if (sscanf(buf, "%f", &y) == 1) Success(); 

如果沒有,則使用

float y = (float)atof(buf); 

注意,第二可以通過編譯器進行優化,以所謂的「串漂浮」,如果它違反了微妙double rounding,否則與此第二個代碼發生。

相關問題