Gebietsschemaunabhängige strtod-Implementierung

8

Ich habe eine Bibliothek, die doppelte Zahlen parsen muss, die immer einen Punkt '.' als Dezimaltrennzeichen. Unglücklicherweise respektiert strtod () in diesem Fall das Gebietsschema, das möglicherweise ein anderes Trennzeichen verwendet, und daher kann das Parsen fehlschlagen. Ich kann locale () nicht festlegen - es ist nicht Thread-sicher. Also suche ich jetzt nach einer sauberen locale-unabhängigen Implementierung von strtod. Ich habe bis jetzt mehrere Implementierungen gefunden, aber alle sehen hacky oder einfach wie schlechter Code aus. Kann jemand eine gut getestete, funktionierende, saubere (ANSI) C-Implementierung für mich empfehlen?

    
bert 03.01.2010, 11:13
quelle

4 Antworten

3

Nimm eine bekannte Implementierung (die nicht von atof abhängt), wie die, die mit Ruby verteilt wird: ruby_1_8 / missing / strtod.c .

    
przemoc 03.01.2010, 12:09
quelle
2

Im Anschluss an die Antwort oben habe ich versucht, die Ruby-Implementierung unter Verwendung von ruby_1_8 / fehlend /strtod.c . Doch für manche Eingänge gibt diese unterschiedliche Antworten auf gcc eingebaute Parser und strtod aus stdlib.h, sowohl auf Mac und Linux-Plattformen:

%Vor%

welches druckt

%Vor%

Also mein Rat ist die gewählte Implementierung vor der Verwendung zu testen.

    
Gavin Band 03.08.2011 10:02
quelle
2

Warnung: Die vorgeschlagene Implementierung von ruby ​​enthält Fehler. Ich hätte nichts gegen den kleinen Unterschied, der von Gavin aufgezeigt wird, aber wenn Sie versuchen, etwas wie "0.000000000000000000000000000000000000783475" zu parsen, erhalten Sie 0.0 statt 7.834750e-37 (wie die Aktie strtod () zurückgibt.)

Andere Lösung:

%Vor%

Ich weiß aber nicht, wie schnell das ist.

    
Florian Kusche 14.02.2012 09:51
quelle
0

Auf netlib, BSD style license steht auch gdtoa zur Verfügung: Ссылка

    
Spudd86 26.05.2010 19:52
quelle

Tags und Links