2009-11-10 11 views
8

Mam bazę wypełnione podwaja jak na następujący:smyczkowy naukowej notacji C++ do podwójnej konwersji

1.60000000000000000000000000000000000e+01 

Czy ktoś wie jak przekonwertować liczbę tak, aby podwójne w C++?

Czy istnieje "standardowy" sposób robienia tego typu rzeczy? Czy muszę wykonać swoją własną funkcję?

Teraz robię czegoś takiego:

#include <string> 
#include <sstream> 



int main() { 
    std::string s("1.60000000000000000000000000000000000e+01"); 
    std::istringstream iss(s); 
    double d; 
    iss >> d; 
    d += 10.303030; 
    std::cout << d << std::endl; 
} 

Dzięki!

+2

Jaki rodzaj bazy danych? Jaki jest schemat bazy danych wokół tego pola? –

+0

Jaka jest precyzja, której nie chcesz używać? Jeśli ta wysoka precyzja nie jest problemem, możesz "wyciąć" ten ciąg i przekonwertować go na podwójne, używając zwykłych funkcji C. – Andres

+0

Należy zwrócić uwagę na stan strumienia napisów po ich odczytaniu. Czytanie może się nie udać. – sbi

Odpowiedz

16

Coś takiego? Byłby to "C++" sposób to zrobić ...

#include <sstream> 
using namespace std; 

// ... 

    string s = "1.60000000000000000000000000000000000e+01"; 
    istringstream os(s); 
    double d; 
    os >> d; 
    cout << d << endl; 

Drukuje 16.

+4

Jeśli masz boost, to 'double d = boost :: lexical_cast (s)' będzie Zrobić to samo. –

+0

Czy to ma działać, jeśli zmienimy typ na "int"? Wydaje mi się, że po prostu wychodzę z zera, czy rutyna może nie obsługiwać zapisu wykładniczego, mimo że reprezentuje liczbę całkowitą? –

+0

[To skomplikowane] (http://en.cppreference.com/w/cpp/locale/num_get/get), ale prawdopodobnie nie. – Thomas

7

Chcesz standardowej funkcji c atof ([A] SCII na [F] loat, ale w rzeczywistości używa ona podwójnych zamiast pływaków).

+1

To będzie znacznie szybsze niż używanie obiektów strumienia C++. –

+0

atof konwertuje do podwójnego podobnego do OP i mówi docs. – luke

+2

@Heath: Zawsze łatwo jest być szybkim, gdy pomijasz ważne kroki: 'atof (" 0.0 ")' vs. 'atof (" bla ")'. (Uwaga: nie próbuję bronić strumieni w C++, one są wolniejsze niż powinny, ale wskazują jednoznacznie na błędy.) – sbi

Powiązane problemy