2013-01-25 6 views
32

Gibt es eine Möglichkeit, die Genauigkeit des Ergebnisses beim Konvertieren eines Double in String mit std :: to_string()?Die Genauigkeit von std :: to_string (double)

+1

Siehe auch http://stackoverflow.com/a/16606128/2436175 – Antonio

+0

Dies ist die Antwort, die Sie gesucht haben: https://stackoverflow.com/a/16606128/512225 – jimifiki

Antwort

30

No.

Returns: Jede Funktion ein String-Objekt liefert die Zeichendarstellung des Wertes der ihr Argument hält, die durch den Aufruf sprintf(buf, fmt, val) mit einem Format-Spezifizierer von "%d", erzeugt werden würde "%u", "%ld", "%lu", "%lld", "%llu", "%f", "%f", oder "%Lf", wobei buf einen internen Zeichenpuffer von ausreichender Größe bezeichnet.

+0

http: //en.cppreference. com/w/cpp/Zeichenfolge/basic_string/to_string –

2

Ich glaube, dass std::stringstream mit setprecision Verwendung wäre die flexibelste/portable Wahl, aber wenn Sie Ihre Daten kennen, als Problem zu umgehen, könnten Sie versuchen, das to_string Ergebnis String. Zum Beispiel:

std::string seriesSum(int n) 
{ 
    double sum = 0, div = 1; 
    for(int i = 0; i < n; i++) { 
     sum += 1.0/div; 
     div += 3; 
    } 

    return std::to_string(round(sum * 100)/100).substr(0,4); 
} 

In dem obigen Code ich mit zwei Dezimalstellen bin Druck 0.00 durch die ersten 4 Ziffern der Zeichenfolge nehmen, aber es funktioniert nur, weil ich der ganzzahlige Teil weiß nie über einer Ziffer wird. Sie könnten auch string.find() verwenden, um nach dem Dezimaltrennzeichen zu suchen und seine Position zu verwenden, um die Größe des Teilstrings zu berechnen, wodurch es etwas dynamischer wird.

Verwandte Themen