Ich bin gespannt, ob Sie decimal
in double
konvertieren könnten, aber immer noch in der Lage sein, wieder zu demselben decimal
ich begann mit. Natürlich unter der Annahme, dass Sie 15 oder weniger signifikante Ziffern verwenden. Grundsätzlich können, zählen Sie dazu:Reversible Dezimal zu Doppelkonvertierung
decimal original = someValue;
double converted = ReversibleToDouble(original);
decimal result = BackToDecimal(converted);
if (original == result)
Console.WriteLine("All is well with the world.");
ich nichts dagegen, wenn ReversibleToDouble
eine Ausnahme oder etwas geworfen, wenn es keine solche Umwandlung ist, solange das Ergebnis nach erfolgreichem Abschluss gewährleistet ist. Gerade jetzt, das ist die triviale Lösung Ich habe:
public static double ReversibleToDouble(decimal input)
{
double output = (double)input;
if ((decimal)output != input)
throw new ArgumentException("Impossible to convert reversibly.", "input");
return output;
}
public static decimal BackToDecimal(double input)
{
return (decimal)input;
}
Ich weiß nicht wirklich viel über numerische Analyse wissen, damit ich ein paar Fragen zu diesem.
Erste Frage: Ist diese triviale Methode garantiert ohne Ausnahme zu arbeiten , wenn es weniger als 15 signifikante Ziffern vor dem Versuch, Konvertierungen zu versuchen?
Wenn nicht, zweite Frage: Gibt es eine Möglichkeit, dies mit größerer Wahrscheinlichkeit zu arbeiten?
Wenn ja, eine letzte Frage: Ist das machbar, ohne ein Fachgebiet zu studieren? :)
Ich denke, das ist eine gute Frage (numerische Analyse ist hart), aber ich verstehe nicht, warum es in Ordnung wäre, Informationen aus dem 'zu verlieren Dezimal "durch Runden, aber nicht OK, um es zu verlieren, indem man eine naive Umwandlung zu' doppeltem 'durchführt. –
@MichaelBurr Guter Punkt. Ich habe diesen Teil tatsächlich hinzugefügt, weil ich weiß, dass Doppelgänger eine eingeschränkte Präzision haben, aber in Wirklichkeit werde ich nicht wirklich mit so vielen Ziffern arbeiten. Grundsätzlich interessiere ich mich mehr für die Eigenschaften dieser Conversions und ob ich dieser Gleichheitsprüfung für relativ "einfache" Zahlen vertrauen kann, die in binärer Darstellung schlecht aussehen könnten. Es ist völlig richtig, dass ich dieses Problem umgehen kann, ich frage mich nur, ob das Problem überhaupt existiert. Wenn das Sinn macht. –
Darf ich fragen, warum Sie das brauchen? – Paparazzi