5

私はdecimalプロパティを持つクラスを持っており、JSON.NETを使用してシリアル化と逆シリアル化しています。私が抱えている問題は、10進値が100000000000023063.0である場合、逆シリアル化すると100000000000023000に変換されることです。JSONを確認したところ、100000000000023063.0として確実に記録されています。

私はそれを調べました&

decimal.Parse("100000000000023063.0")

=

100000000000023063.0

しかし

var d = (decimal)100000000000023063.0

=

100000000000023000

文字列として保存し、decimal.Parse()を実行するプロパティを設定することでこの問題を回避できますが、なぜこれが発生するのか誰かが知っていますか?

4

2 に答える 2

12

これ100000000000023063.0は、がdouble定数であり、これをに変換しているためdecimal、精度が失われているためです。

代わりに次のように記述してください。

var d = 100000000000023063.0M;

接尾辞は、数値が定数MであることをC#コンパイラに通知します。decimal

実際、これには小数点も必要ありません。つまり1M == 1.0M、両方ともdecimalsです。

于 2012-07-03T12:00:39.200 に答える
1

これは、値を Decimal として定義する必要があるのに、double を Decimal にキャストしているためです。

var q = 100000000000023063.0M;

M サフィックスは、数値定数が Decimal 型であることを示します。

于 2012-07-03T12:03:00.307 に答える