2012-08-22 4 views
6

Ich versuche, eine GPS-Lesung von einem String zu einem Float auf meinem Arduino zu bekommen. Die Saite hat alle Griffe aller Ziffern gut, aber wenn ich es teile, um einen Floss zu bekommen, verliere ich 4 meiner Ziffern. Hier ist mein Code:Verlust von Ziffern beim Teilen von Gleitkommazahlen C++ (Arduino)

gpsStrings[0].replace(".", ""); 
lat = gpsRawData[0].toFloat(); 
lat = lat/1000000.0; 

Mit .toFloat auf einer Zeichenfolge, die nach wie vor das Komma hat darin in der gleichen Sache ergeben, nur zwei Zahlen nach dem Komma.

Beispielnummern:

42427898 :: 42.43 - what happens 
42427898 :: 42.427898 - what I want to happen 

Antwort

5

In Ordnung, ich war falsch, die Standarddruckfunktion verwendet nur zwei Stellen der Genauigkeit. Also musste ich der Aussage hinzufügen, wie viele Ziffern ich haben wollte.

print(lat, 20); 

Werden 20 Stellen genau auf dem seriellen Monitor geben, wo

print(lat) 

nur zwei gibt.

0

Sie wollen anstelle eines Schwimmers Double verwenden.

Weitere Informationen finden Sie unter und http://en.wikipedia.org/wiki/Double_precision#Double-precision_examples.

+1

Ich bekomme das gleiche Ergebnis. Auf Arduino sind Doppelte nicht genauer als Schwimmer. Sie können die gleiche Anzahl von Ziffern enthalten. http://arduino.cc/en/Reference/Double – Steven

+0

Ich sehe, das ist ziemlich bedauerlich .. Danke für den Tipp – ZnArK

Verwandte Themen