Forum: PC-Programmierung Float Format


von Frank K. (milophiel)


Lesenswert?

Hallo liebe mikrocontroller Gemeinde,

ich wollte euch kurz um eure hilfe bitten. Ich möchte gerne Float mit 
e^6 benutzen, egal was eingegeben wird. Ich lese derzeit eine Textbox 
aus und Convertiere sie mit (float)Convert.ToDouble() zu meiner float 
variablen.

Wenn ich 45000000 eingebe möchte ich 45,0E+06 haben oder bei 45111000 
möchte ich 45,111E+06 haben. Derzeit habe ich bei 45000000 ->4,5E+07

Wie kann ich dem Float meine formatierung vorgeben oder das problem 
anders lösen?

liebe grüße und vielen dank im vorraus

von Peter II (Gast)


Lesenswert?

Warum brauchst du diese Formatierung. Float ist doch so festgelegt, das 
es vor dem , nur 1 stelle gibt. 4,5E+07 ist damit richtig. Die fehlenden 
nachkomme stellen werde schon vorhanden sein, nur werden sich nicht mit 
angezeigt.

von Frank K. (milophiel)


Lesenswert?

Achso ich brauche die Formatierung so, weil ich die Eingaben in MHz 
machen muss. Es können aber auch eingaben in MHz sein die bis auf Hz 
genau deklariert sind.

von Peter II (Gast)


Lesenswert?

Frank K. schrieb:
> Achso ich brauche die Formatierung so, weil ich die Eingaben in MHz
> machen muss. Es können aber auch eingaben in MHz sein die bis auf Hz
> genau deklariert sind.

für die eingabe ist es doch egal. Es ist doch nur die Darstellung. 
Wandle es doch mal in ein int um, dann müsste alles stellen da sein.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Frank K. schrieb:
> Ich lese derzeit eine Textbox aus

Meine Controller (du hast ja die "Mikrocontrollergemeinde" angesprochen)
haben keine Textboxen.

Vielleicht erzählst du ja vorab, in welcher Programmierumgebung du da
gerade arbeitest …

von Frank K. (milophiel)


Lesenswert?

Achso entschudigt bitte, ich arbeite mit c# an ein paar windowsforms

@Peter II (Gast) es geht nicht um die genauigkeit, es sind alle stellen 
da. Es geht nur darum das ich e^6 haben möchte, da es in MHz angegeben 
werden soll

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Du dividierst einfach die Zahl durch 1e6, zeigst das Ergebnis als Float 
ohne Exponent an (wie auch immer das in C# geht, aber irgendwie gehen 
tut es sicher) und schreibst anschließend den String "E+06" (oder besser 
" MHz") dahinter.

von Peter II (Gast)


Lesenswert?

Frank K. schrieb:
> Es geht nur darum das ich e^6 haben möchte, da es in MHz angegeben
> werden soll

dann sag das doch.


schau dir mal den Formator bei toString an.

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#RFormatString


wert.ToString("E06") könnte eventuell gehen.

von Peter II (Gast)


Lesenswert?

Nachtrag:

http://msdn.microsoft.com/en-us/library/shxtf045.aspx

das ist bestimmt was passendes dabei.

von Frank K. (milophiel)


Lesenswert?

Ja das man das machen kann ist mir schon klar xD, ich wolltedas aber 
gerne etwas "sauberer" erleigen. Ich kann auch einfach ein paar buttons 
für Hz KHz und MHz und das dann dividieren und multiplizieren, so dasss 
es passt.

Naja meine frage ist halt ob man das Floarformat ändern kann. Bei Sting 
kann man auch die Werte Formatieren mit string.Formal(0:00,000000) 
<--oder so ähnlich ^^

von Frank K. (milophiel)


Lesenswert?

Vilt. noch wichtig zu erwähnen. Die Eingabe und die Augabe läuft über 
die gleich textbox und wird dann auf float geschrieben. Und die Box 
reagiert auf textchange. Jetzt hatte ich grade die Idee das ivent zu 
wechseln, dann ist das problem vilt schon gelöst

: Bearbeitet durch User
von Frank K. (milophiel)


Lesenswert?

Ja das Problem ist im Prinziep gelösst. Sollte jemmand aber ne idee 
haben die ich das Floatformat ändern kann, dann bitte noch melden.

von Peter II (Gast)


Lesenswert?

Frank K. schrieb:
> Ja das Problem ist im Prinziep gelösst. Sollte jemmand aber ne idee
> haben die ich das Floatformat ändern kann, dann bitte noch melden.

hast du dir mal den link zu den format parametern angeschaut? Teste doch 
mal "E06".

von Yalu X. (yalu) (Moderator)


Lesenswert?

Peter II schrieb:
> Teste doch mal "E06".

Die Zahl nach dem 'E' gibt doch die Anzahl der Nachkommastellen der
Mantisse an. Die Größe des Exponents bleibt davon unberührt.

  "Exactly one digit always precedes the decimal point."

Daran lässt sich wohl nichts ändern.

von Peter II (Gast)


Lesenswert?

Yalu X. schrieb:
> Die Zahl nach dem 'E' gibt doch die Anzahl der Nachkommastellen der
> Mantisse an. Die Größe des Exponents bleibt davon unberührt.

müsste da nicht beides gehen

[sign]integral-digits[.[fractional-digits]][e[sign]exponential-digits]

von Arc N. (arc)


Lesenswert?

Frank K. schrieb:
> Ja das Problem ist im Prinziep gelösst. Sollte jemmand aber ne idee
> haben die ich das Floatformat ändern kann, dann bitte noch melden.

ToString("0,,.000000") zwar ohne E+06, teilt aber die Zahl vor der 
Umwandlung durch eine Million

http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SpecifierTh

von Flash Gordon (Gast)


Lesenswert?

Es gibt die Format anweisung :
 Format(" % 6.3f",[frequenz/1E6]);
und die besagt fixed point, 6 stellen, davon 3 hinter dem Komma. Und der 
Parameter als Megahertz.

von Frank K. (milophiel)


Lesenswert?

Hi, irgendwie klappt das nicht. Ich habe das jetzt so eingebaut und wie 
gesagt, ich bekomme dabei ne Fehlermeldung das andere zeichen erwartet 
werden.

rTB_test.Text = string.Format(" % 6.3f",[formatbuffer/1E6]);

von Yalu X. (yalu) (Moderator)


Lesenswert?

Das ist ja auch völlig falsch. Lies dir mal die Anleitung zu
string.Format durch. Flash Gordon meinte wahrscheinlich folgendes:
1
rTB_test.Text = string.Format("{0:##.###}", value/1e6);

von Frank K. (milophiel)


Lesenswert?

Hmm okay so komme ich auf MHz das war schon gut. Jetzt habe ich aber 
string.Format("{0:00e+0}",Wert) genutzt um eine Wissenschaftliche 
eingabe zu machen.

vielen dank =)

von Frank K. (milophiel)


Lesenswert?

genau genommen string.Format("{0:00.000000E+0}",Wert)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.