Ermitteln der Anzahl der Dezimalstellen beliebiger Zahlen (nicht nur Anführungszeichen) unter Umgehung von Digits() in MQL4 und MQL5 - Seite 5

 
A100:

Sie brauchen eine

so dass

war das Ergebnis: 4

Genau vier? Los geht's.

 
fxsaber:

Vielleicht ist das genau die Funktion, die Sie brauchen. Antwort an den TC

Er braucht genau eine solche Funktion, denn (wie Sie richtig bemerkt haben) lassen sich nicht alle Zahlen exakt als Double darstellen, was bedeutet, dass die Lösung des Problems ohne Angabe der Genauigkeit sinnlos ist (weil sie im allgemeinen Fall zu absurden Ergebnissen führt).

 
A100:

Genau das braucht er, denn (wie Sie richtig bemerkten) lassen sich nicht alle Zahlen genau als Pasch darstellen, was bedeutet, dass die Lösung des Problems ohne Angabe der Genauigkeit sinnlos ist (weil sie im Allgemeinen zu absurden Ergebnissen führt).

Welche Möglichkeiten gibt es, die Genauigkeit festzulegen, ohne die Anzahl der Dezimalstellen zu ändern , oder wie kann ich den in meiner Version beschriebenen Nachteil beseitigen? Für mich selbst habe ich nur den (String)Wert

 
Alexandr Sokolov:

Welche Möglichkeiten gibt es, die Genauigkeit festzulegen, ohne die Anzahl der Dezimalstellen zu ändern , oder wie kann ich den in meiner Version beschriebenen Nachteil beseitigen? Für mich selbst habe ich nur den (String)Wert

Ich vermute, Sie meinen, innerhalb welcher Grenzen die letzte Nicht-Null zu suchen ist.

 

Ich habe versucht, eine Berechnung der Anzahl der Nachkommastellen durch MathMod() mit einer aufeinanderfolgenden Teiler 0,1, dann 0,01 ... 0,000(15 Nullen) 1 zu tun, hat es nicht funktioniert, die Genauigkeit der Zahl hält "Floating" müssen jedes Mal zu normalisieren, und wenn Sie Normalisierung verwenden, dann ist es einfacher, die Zahl, die Sie wollen und normalisiert zu vergleichen, was Zeichen - wenn anders, dann fand das letzte Zeichen

HH: es gibt eine weitere Möglichkeit, hatte keine Zeit zu überprüfen - multiplizieren Sie eine reelle Zahl ohne einen ganzzahligen Teil von 10 ^ 16 und speichern Sie alles in lang, und dann durch 10 teilen und überprüfen Sie den Rest der Division, wenn = 0, dann wieder teilen

 
Igor Makanu:

ZS: es gibt noch eine andere Möglichkeit, ich hatte noch keine Zeit zu prüfen - multiplizieren Sie eine reelle Zahl ohne einen ganzzahligen Teil mit 10^16 und speichern Sie alles in Long, und dann teilen Sie durch 10 und prüfen Sie den Rest der Division, wenn = 0, dann teilen Sie wieder

Es wird nicht funktionieren.

 
Verwenden SiedoublePoint()
Dezimaler Logarithmus, Vorzeichenverschiebung...
 
Aliaksandr Hryshyn:
Verwenden SiedoublePoint()
Dezimaler Logarithmus, Vorzeichen verworfen...

Auch getestet, keine Chance.

Das war's.

void OnStart()
{
 double p = 0.07;
 Print(p);
}/*******************************************************************/

Sie führt zu folgendem Ergebnis

2018.11.05 10:43:05.138 !00 (GBPJPY,H1) 0.07000000000000001
Raten Sie dreimal, was der Logarithmus ist...
 
Alexey Viktorov:
Auch getestet, es funktioniert nicht.
Warum nicht? Runden Sie auf das Ganze auf.
 
Sehen Sie sich an, was die Funktion Punkt() zurückgibt.