Ist es möglich, einen "genauen" Wert zu erhalten?

 

Grüße. Ich brauche Hilfe bei einem Problem:

// 0.02 * 4.9 = 0.098
DoubleToStr (0.02 * 4.9, 2); // = 0.1
DoubleToString (0.02 * 4.9, 2); // = 0.1
NormalizeDouble (0.02 * 4.9, 2); // = 0.1

Alle Funktionen geben 0,1 zurück. Obwohl (0,02*4,9) = 0,098 ist und 0,09 ergeben sollte.

Bitte sagen Sie mir, wie ich den genauen Wert ermitteln kann, den mein Taschenrechner liefert? :)

 

0,02*4,9=0,098 -- nicht 0,98

Ausgabe im Format mit 2 Dezimalstellen -- 0,098 wird gemäß den Rundungsregeln auf 0,10 gerundet ausgegeben

bei Ausgabe im 3-stelligen Format -- es wird die ganze Zahl ausgegeben.

 
abolk:

0,02*4,9=0,098 -- nicht 0,98

Ausgabe im Format mit 2 Dezimalstellen -- 0,098 wird gemäß den Rundungsregeln auf 0,10 gerundet ausgegeben

Wenn die Ausgabe im dreistelligen Format erfolgt, wird die ganze Zahl gedruckt.

Danke, ich habe die Zahlen korrigiert.

Das ist das Problem, man muss 2 Stellen nach dem Komma nehmen. :) Warum ist sie abgerundet? Wie kann man eine gebrochene Zahl ohne Rundung und mit nur 2 Nachkommastellen (0,09) nehmen?

 
WePlexus:

Danke, ich habe die Zahlen korrigiert.

Das ist das Problem, man muss zwei Dezimalstellen nehmen. :) Warum ist sie abgerundet? Wie kann man eine gebrochene Zahl ohne Rundung und mit nur 2 Nachkommastellen (0,09) nehmen?

in eine Zeichenkette umwandeln und die Anzahl der Ziffern ermitteln
 
WePlexus:

Danke, ich habe die Zahlen korrigiert.

Das ist das Problem, man muss zwei Dezimalstellen nehmen. :) Warum ist sie abgerundet? Wie kann man eine gebrochene Zahl ohne Rundung und mit nur 2 Nachkommastellen (0,09) nehmen?

int a=int(0.098/0.01);
   double b=a*0.01;
   Comment(DoubleToString(b,2));
 
sanyooooook:
in eine Zeichenkette übersetzen und die gewünschte Anzahl von Zeichen übernehmen
Kennen Sie nicht einen einfacheren Weg?
 
Vinin:
Kennen Sie einen einfacheren Weg
Können Sie mir einen Tipp geben? :)
 
valeryk:

Und wenn Sie das tun:

int a=int((0.09*5)/0.01);
double b=a*0.01;
Comment (DoubleToString (b,2));

Das Ergebnis ist 0,44 statt der erforderlichen 0,45.

 
WePlexus:

Und wenn Sie das tun:

Das Ergebnis ist 0,44 statt der erforderlichen 0,45.

int a=int(MathFloor((0.98)/0.001));
   double b=a*0.001;
   Comment(DoubleToString(b,2));
 
valeryk:

0,098, nicht 0,98. :)

int a = int (MathFloor ((0.098) / 0.001));
double b = a * 0.001;
Comment (DoubleToString (b, 2));

Gibt 1 zurück, und gewünschter exakter Wert = 0,09.

 
Vinin:
Kennen Sie einen einfacheren Weg?

Das ist das erste, was mir einfällt, aber es gibt natürlich auch einfachere.

Es ist auch nicht kompliziert, aber vielleicht ist es langsamer:

   int DIGITS=2;
   string stroka=DoubleToString(0.09845,8);
   int P=StringFind(stroka,".");
   Print(stroka);
    stroka=StringSubstr(stroka,0,P+DIGITS+1);
   Print(StringToDouble(stroka));

возвращает:

2014.10.04 11:32:53.731	normalize EURUSD,H4: 0.09
2014.10.04 11:32:53.731	normalize EURUSD,H4: 0.09845000