2009-11-04 64 views
0

我必須從字符串讀取一個浮點值最多6精度,當前代碼只讀取前6位數字。在此先感謝從字符串讀取浮點值高達6精度

template <class T> 
bool from_string(T& t, const std::string& s, 
       std::ios_base& (*f)(std::ios_base&)) 
{ 
    std::istringstream iss(s); 
    return !(iss >> f >> t).fail(); 
} 

int main() 
{ 
    int i; 
    float f; 
// the third parameter of from_string() should be 
    // one of std::hex, std::dec or std::oct 
    if(from_string<int>(i, std::string("ff"), std::hex)) 
    { 
    std::cout << i << std::endl; 
    } 
    else 
    { 
    std::cout << "from_string failed" << std::endl; 
    } 

    if(from_string<float>(f, std::string("1456.909"), std::dec)) 
    { 
    std::cout << f << std::endl; 
    } 
    else 
    { 
    std::cout << "from_string failed" << std::endl; 
    } 
    return 0; 
} 

回答

2

我很確定它是讀取所有數字。問題似乎在你所期望的。讓我們來強化一下:如果您在中讀取1456.90900000000000000000000000000,您會發生什麼?

1

如果您想要比6位數字更好,您需要使用double而不是float。你的問題說「6位精度」,也是「前6位數」,但你提出的是7位數的輸入。

浮點數只能保持6位精度,即x.yzpqrs或xy.zpqrs或xyzpq.rs。如果你在保留6 小數點後那麼你需要使用雙精度。

例如,您可以通過使用cout.precision(7)來輸出更多的小數位數,在這種情況下,即使C實際上不存儲7位數字,也會輸出正確的答案,只是近似於正確答案。