Double vs FLOAT - unklarer MathFloor-Fehler - Seite 3

 

Beachten Sie, dass die normalisierte Zahl bei der Ausgabe in das Logbuch mit Print() mehr Nachkommastellen enthalten kann, als Sie erwarten. Zum Beispiel,

dann im Kommentar das gleiche

 
fxsaber:
#define TOSTRING(A) #A + " = " + (string)(A) + " "

void OnStart()
{
  double Price1 = 105143;
  double Price2 = Price1 - 1 e-11;

  Print(TOSTRING(Price1) + TOSTRING(MathFloor(Price1)) +
        TOSTRING(Price2) + TOSTRING(MathFloor(Price2)) +
        TOSTRING(Price1 > Price2));
}
Ergebnis
Price1 = 105143.0 MathFloor(Price1) = 105143.0 Price2 = 105143.0 MathFloor(Price2) = 105142.0 Price1>Price2 = true
Nehmen Sie die Verrechnung von Doppelnummern nicht wörtlich.

Danke, ich muss wohl doch die richtige Lösung gefunden haben, aber ich hatte schon Angst, dass ich einen Fehler mache, weil die Ausrichtung nicht stimmt!

 

Der Rest einer nicht-normierten Zahl geteilt durch eine andere nicht-normierte Zahl, das Ergebnis ist in jedem Fall nicht-normiert.

Diese Funktion sollte ganz aus der Sprache entfernt werden, um die unreife Psyche nicht zu traumatisieren.

 
Vladislav Andruschenko:

Vielleicht habe ich ja doch die richtige Lösung gefunden.

Leider zeigt Ihr Code, dass Sie völlig falsch verstanden haben, was Sie tun. Versuchen Sie, der Sache auf den Grund zu gehen.
 
Dmitry Fedoseev:

Der Rest einer nicht-normierten Zahl geteilt durch eine andere nicht-normierte Zahl, das Ergebnis ist in jedem Fall nicht-normiert.

Diese Funktion sollte ganz aus der Sprache entfernt werden, um die unreife Psyche nicht zu traumatisieren.

Nun, für mich ist alles normalisiert. Das ist ja so lustig.
 
Vladislav Andruschenko:
Nun, für mich ist das in Ordnung. Das ist der schwierige Teil.
Sie führen unnötige Umstellungen durch, durch die Sie Zeichen verlieren.

Normalisieren Sie nur, bevor Sie die Ergebnisse Ihrer Berechnungen direkt verwenden. Vermeiden Sie alle Zahlenumrechnungen und Umrechnungen so weit wie möglich im Voraus.
 
Andrey Dik:
Sie nehmen unnötige Konvertierungen vor, die zu einem Verlust von Zeichen führen.
Dies sind bereits verzweifelte Codes..... Ich habe es auf verschiedene Arten gemacht. Aber wie bereits gesagt. Wahrscheinlich, weil ich den Fehler falsch eingeschätzt habe, habe ich gesündigt. Allerdings waren auch diese Variablen im Code fehlerhaft.

Ich danke Ihnen allen für Ihre Hilfe und Ihre Vorschläge. Aber mit Float funktioniert alles klar.
 
Vladislav Andruschenko:
mit Schwimmer funktioniert alles gut.
Eine der schlechtesten Empfehlungen ist der Wechsel von Double zu Float.
 
Vladislav Andruschenko:
Nun, für mich ist das in Ordnung. Das ist das Komische daran.
Wo auf der Welt ist das normal?
 
Vladislav Andruschenko:
Es ist bereits verzweifelt codes..... Ich habe es auf verschiedene Arten gemacht. Aber wie bereits gesagt. Wahrscheinlich, weil ich fälschlicherweise angenommen habe, dass ich einen Fehler begangen habe. Allerdings waren auch diese Variablen im Code fehlerhaft.

Ich danke Ihnen allen für Ihre Hilfe und Ihre Vorschläge. Aber mit Float funktioniert alles klar.
Float ist eine Zahlenkastration, die Ihnen keinen Vorteil bringt. Es ist besser, alle Verluste bei der Umrechnung in Kauf zu nehmen und die höchstmögliche Genauigkeit zu verwenden - das Doppelte.