CString zu Double und wieder zurück Konvertieren, wie?



  • Wie kann ich meine CStrings zu Doubles Konvertieren und die Doubles nach einer berechnung wieder zu CStrings??



  • Double to CString:

    CString csMyString;
    double dMyDouble = WASAUCHIMMER;
    csMyString.Format("%d", dMyDouble);
    

    Das andere kann ich dir nicht genau sagen. Ich hab das mal für Unsigned Double versucht. Das so in etwa so aus (geht sicher besser):

    bool IsNumber(CString csNumber)
    {
    	for(int nI = 0; nI < csNumber.GetLength(); nI++)
    	{
    		if(csNumber[nI] > 0x39 || csNumber[nI] < 0x30)
    			return(false);
    	}
    	return(true);
    }
    
    double  CStringToUnsignedDouble(CString csToUnsignedDouble)
    {
    	CString		csVormKomma,
    				csNachKomma;
    
    	int			nKomma = -1;
    	double		dReturn = -1;
    
    	nKomma = csToUnsignedDouble.Find('.');
    	if(nKomma < 0)
    	{
    		nKomma = csToUnsignedDouble.Find(',');
    		if(nKomma < 0)
    			return(IsNumber(csToUnsignedDouble) ? (double)_ttoi((LPCTSTR)csToUnsignedDouble) : -1);
    	}
    
    	csVormKomma	= 	csToUnsignedDouble.Left(nKomma);
    	csNachKomma =	csToUnsignedDouble.Right(csToUnsignedDouble.GetLength()-1-nKomma);
    
    	if(!IsNumber(csVormKomma) || (!csNachKomma.IsEmpty() && !IsNumber(csNachKomma)))	// sind beides nummer?
    		return(-1);
    
    	dReturn = (double)_ttoi((LPCTSTR)csVormKomma);
    	dReturn += (double)_ttoi((LPCTSTR)csNachKomma) / (double)(pow(10, csNachKomma.GetLength()));
    
    	return((double)(int)(dReturn * 100) / 100.0f);
    }
    

    Also funktionieren tuht das aber wäre cool wenn jemand das noch besser hat mit signed double *auch such*



  • Ach wennde es mit signened double schnell brauchst such als ersten im String noch nach einen '-' und wenn Du eins findest machst du am Ende einfach *(-1)...
    ...ach ich weiß garnicht mehr viel viele Stellen nach dem Komma die Funktion kann...*grad wenig zeit* mußt selber mal schaun



  • double b;
    CString a = "12,3456"
    b = atof(a);
    

Anmelden zum Antworten