# String 2 Double



## ToDu (19. April 2006)

Hi,

mein Problem besteht darin, dass ich eine Datei habe, in welcher X und Y Werte stehen (pro Zeile ein Tupel). Diese Werte brauch ich für weitere Berechnungen als Variablen in meinem Programm. 

Erste Zeile der Datei wäre z.B. 12 34 

while(cfKart.ReadString(sTemp) != NULL)
		{

			nIndex = sTemp.Find(sLeerzeichen);  //Leerzeichen suchen
			sXWert = sTemp.Left(nIndex);           //sXWert = 12
		}
Ich weiß das sXWert den richtigen Wert enthält aber ich habe keinen Plan wie ich den jetzt in einen double casten kann. Über ein paar Denkanstöße wäre ich echt dankbar.

Btw. 
                const char* ptmp=NULL;
		ptemp = (LPCTSTR) sXWert;
                double x = atof(pTemp);

funktioniert bei mir nicht. Habe ich aus einem Thread hier nur leicht abgewandelt.


Mfg
ToDu


----------



## jokey2 (19. April 2006)

1.: Da du 'atof' ja schon verwendest, setze ich die als bekannt voraus. Wenn du statt eines 'float' einen 'double' brauchst, schau' Dir mal die Funktion 'strtod' an.
2.: 
	
	
	



```
const char* ptmp=NULL;
ptemp = (LPCTSTR) sXWert;
double x = atof(pTemp);
```
Schau' Dir nochmal genau die drei fettgedruckten Namen an. Du sprichst da 3 verschiedene Variablen an.


----------



## ToDu (19. April 2006)

Hi,

Ich hab nur vergessen das e raus zu machen aber im Programm stimmt es. Habe es nur schnell nochmal zusammen kopiert.  Es sollte laut 10 Foren alleine double x = atof(sXWert); reichen. Die Fehlermeldung ist folgende:

error C2440: '=': 'LPCTSTR' kann nicht in 'const char *' konvertiert werden.

Mich würde mal interessieren ob mein Ansatz soweit ok ist oder ob der schon Fehlerhaft ist?
Ich arbeite übrigens mit Visual Studio 2005.

Mfg
ToDu


----------



## MCoder (19. April 2006)

So wie ich das sehe, ist "sXWert" ein CString-Objekt. Das kannst du direkt als Parameter an atof() übergeben:

```
double x = atof(sXWert);
```
Gruß
MCoder


----------



## RuFFnEcK (19. April 2006)

Hallo zusammen,

also ich muss sagen bei mir haben sämtliche Methoden aus nem CString Objekt ein Wert 
zu ermitteln nicht funktioniert... 
Womit es letztendlich funktioniert hat ist:


```
char * tempRest;
CString sTest = "12";
double dDerWertAlsDouble = strtod(temp, &tempRest);
```

Man kann dann noch den tempRest char Pointer prüfen ob es den gleichen Inhalt wie der CString hat,
um festzustellen ob sich überhaupt eine Zahl in dem String befand...

Grüße
RuFF


----------



## ToDu (20. April 2006)

Moin,

also unter Visual Studio 2005 kann ich weder atof verwenden noch kann ich RuFF´s Lösung benutzen da immer der gleiche Fehler beim kompilieren auftritt.Er meldet das die Konvertierung in const char * nicht möglich ist weder von CString noch von einem LPCTSTR. 
Ich bin immer noch ratlos. 



Mfg
ToDu


----------



## Endurion (20. April 2006)

In VS 2005 sind alle Projekte per Default beim Anlegen Unicode. LPCTSTR ist dann kein const char* sondern ein const wchar_t* (oder Entsprechendes). Da funktionieren dann auch die Default-Umwandel-Funktionen nicht. Es gibt aber in der tchar.h-Include-Datei die Defines für sowohl in Multi-Byte als auch Unicode verwendbare Funktionen.

Versuch es mal mit _tstof.

Nachtrag: Mein 1500.er Post! Ich hätte gerne das grüne Auto als Geschenk verpackt!


----------



## ToDu (20. April 2006)

@Endurion Vielen Dank für die Lösung . 

Das double dYWert = _tcstod(sYWert,NULL); funktioniert bei mir optimal. Das Problem ist wohl die Unicode-Einstellung.



Mfg
ToDu


----------

