Frage

Die heutige Problem ist wie folgt: Wir haben eine Tabelle in einer Oracle-Datenbank. Die Tabelle enthält ein Feld, das vom Typ Zahl (18, 3).

Auf der Oberfläche, beiden Speicher und Laden von Daten aus dem Feld arbeitet perfekt. Jedoch weitere Betrachtung zeigt, dass die Zahlen, die drei Dezimalstellen in ihnen haben, zum Beispiel 500.001, werden aus der Datenbank so gelesen, dass die String-Darstellung des Dezimalsystems eine vierte, Ziffer Null (z 500,0010) aufweist. Dies scheint zu passieren, wenn die dritte Nachkommastelle ungleich Null ist.

Für mathematische Zwecke ist dies kein Problem. Allerdings haben wir Validatoren, die die Anzahl der Dezimalstellen in einer Dezimalzahl überprüfen, indem es in einen String umzuwandeln und dann die Anzahl der Dezimalstellen zu zählen. Da dieses besondere Stück Daten definiert ist höchstens drei Dezimalstellen zu haben, die zusätzliche Null verursacht einen Überprüfungsfehler.

Da kann ich nicht die Validierer ändern, ich frage mich, links, wenn es eine saubere Art und Weise ist das Dezimalsystem ohne die zusätzliche Null zu bekommen, abgesehen von der Zahl in einen String konvertieren, Trimmen die nachfolgenden Nullen und dann wieder Parsing es? Oder sollte ich etwas ganz anderes tun?

War es hilfreich?

Lösung

Versuchen Sie folgendes:

decimal trimmed = ((decimal)((int)(number * 1000))) / 1000

Casting zu int wird der Bruchteil befreien. Sie brauchen nicht alle Klammern, aber ich denke, es ist einfacher zu sehen, was los ist, wenn die Reihenfolge der Operationen explictily angezeigt wird.

Andere Tipps

Ich lief in das gleiche Problem, aber ich verwenden: number.ToString("F3")

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top