Ich habe eine Variable, die eine Menge in einer gegebenen Einheit darstellt:Int64 als Ergebnis von doppelten Zeiten 10^x?
enum Unit
{
Single,
Thousand,
Million,
Billion,
Trillion
}
public class Quantity()
{
public double number;
public Unit numberUnit;
public Int64 GetNumberInSingleUnits()
{
// ???
}
}
Zum Beispiel vorstellen,
var GDP_Of_America = new Quantiy { number = 16.66, numberUnit = Unit.Trillion };
Int64 gdp = GDP_Of_America.GetNumberinSingleUnits(); // should return 16,660,000,000,000
Meine Frage ist im Grunde - wie kann ich die "GetNumberInSingleUnits" Funktion implementieren? Ich kann nicht einfach mit einigen UInt64-Faktor, z.
double num = 0.5;
UInt64 factor = 1000000000000;
var result = num * factor; // won't work! results in double
Da die regelmäßigen numerischen Operationen Reslt in einem doppelten, aber das Ergebnis kann als der Bereich gültiger Doppel größer sein.
Wie könnte ich diese Konvertierung machen?
ps, Ich weiß, die Klasse "Quantity" ist keine gute Möglichkeit, Informationen zu speichern - aber das ist gebunden an die Eingabedaten meiner Anwendung, die in nicht-einzelnen (z. B. Millionen, Milliarden usw.) Einheiten ist.
Sind Sie sicher, dass ein 'Int64' eine höhere Zahl als ein' double' enthalten kann? – Rawling
Jetzt bin ich völlig verwirrt. Es scheint richtig, dass Double.MinValue <= Int64.MinValue und Double.MaxValue> = Int64.MaxValue. Wie ist das überhaupt möglich? Beide sind 8-Byte-Typen. – Bogey
Zu spät für die Bearbeitung, aber: In Ordnung, es scheint, als wäre es eine Frage der Genauigkeit, mit Double nur 100% genau bis 2^54 - was bedeutet, dass Int64 höchstwahrscheinlich immer noch die bessere Option für mich wäre – Bogey