2016-08-04 73 views
0

In MSSQL,
COST_C (float)Gleitpunktzahl ungenau

In Model,
[DisplayFormat(DataFormatString = "{0:0,0}", ApplyFormatInEditMode = true)] public double COST_C { get; set; }

In Ansicht,
<input name="COST_C" class="form-control" value="@ViewBag.costC" />

In Controller
ViewBag.costC = Convert.ToDecimal(project.COST_);

Wenn Update COST_C in Controller, der Wert auf Seite nach dem Update anders geworden .....
1000.00 werden 1000
1000,20 1000,20001220703
1000,18 werden 1000,17999267578

wie werden kann ich es genau machen, was es ist ?

+3

Mögliches Duplikat von [Ist Fließkomma-Mathematik fehlerhaft?] (Http://stackoverflow.com/questions/588004/is-floating-point-math-broken) –

Antwort

0

Das ist ein allgemeines Problem mit Gleitpunkten. Die Genauigkeit Ihres Wertes hängt von der Größe Ihrer Nummer ab. Wenn Sie eine große Zahl haben, können Sie eine hohe Genauigkeit der Dezimalstellen nicht zuverlässig ausdrücken. Der Datentyp selbst ist begrenzt und kann nicht jede Zahl ausdrücken.

Wenn es eine Option für Sie ist (und Sie wirklich diese Genauigkeit benötigen), können Sie die Dezimalstellen in einer neuen Gleitkommavariable trennen, um eine höhere Genauigkeit zu erreichen.

Wenn Sie nur die korrekten Werte anzeigen möchten, können Sie Ihren Wert wie %.2f formatieren, aber Sie müssen den Wert möglicherweise vorher runden. Sie sind immer noch nicht 100% genau.