StringFormat & PrintFormat

Einloggen oder registrieren, um einen Kommentar zu schreiben
Carl Schreiber
Moderator
9934
Carl Schreiber  

Hallo,

weiß jemand zufällig, wie man die Anzahl der 'Ganzen' eines Double-Wertes inkl. führender Nullen in einer String Variablen speichert?

So funktioniert das mit den Nachkommastellen:

int digs = 2;
string fmt = StringFormat("%%.%df",digs);
string strVal = StringFormat(fmt,9.123456678);

Das ergibt: 9.12.

Wie kriege ich jetzt aber ein: 09.12?

Google findet tausendfach nur die Basisversion, F1 (ich benutze das auch;) bietet immerhin die obige Lösung.

Mit diesem Versuch kriege ich leider nur 9.12:

fmt = StringFormat("%%%s.%df",StringFormat("%0i",3+digs),digs); // 2 Vorkommastellen + Punkt + digs Nachkommastellen = 5 in meinem Beispiel

Alles sonst probierte für zu nix Vernünftiges :(

Das bringt auch nur 9.12:

string fmt = StringFormat("%%%s",StringFormat("%0i.%if",3+digs,digs));
Otto Pauser
2167
Otto Pauser  

Musst du handschnitzen ;)

string DoubleToFormat(double _value, int _nullen, int _digits)
{
   string str = DoubleToString(_value,_digits);
   while(StringFind(str,".")<_nullen)
      str="0"+str;
   return(str);
}

void OnStart()
{
   int      intValue = 2;
   double   dblValue = 5;
   string   strValue;

   strValue = DoubleToFormat(dblValue,2,3);
   Print(strValue);

   strValue = DoubleToFormat(intValue,3,2);
   Print(strValue);
}

Mit kleinen Variationen hast du damit ein Tool für Stringmanipulationen.

Carl Schreiber
Moderator
9934
Carl Schreiber  
Otto Pauser:

Musst du handschnitzen ;)

Mit kleinen Variationen hast du damit ein Tool für Stringmanipulationen.

Seufz - wirklich?

C und C++ gibt es jetzt schon soooo lange und dafür keine Lösung? Ist doch nun wirklich keine exostische Vorstellung!

Carl Schreiber
Moderator
9934
Carl Schreiber  

Ich habe die Lösung bekommen, eigentlich ganz einfach:

int digs = 2;
string fmt = StringFormat("%%0%d.%df",3+digs,digs);
string strVal = StringFormat(fmt,9.123456678);

Ich hatte die Vorstellung von %05i und hab daher vegliche das versucht (mit % am falschen Platz):

int digs = 2;
string fmt = StringFormat("%%%0i.%df",3+digs,digs);
string strVal = StringFormat(fmt,9.123456678);
Manchmal steht man sich einfach selber im Weg :(
Einloggen oder registrieren, um einen Kommentar zu schreiben