4

値を XML ドキュメントにシリアル化しています。をシリアル化するときはdouble、精度が失われないこと、およびその文化が干渉しないことを確認したいと考えています。または、私が考えたことのない他の「落とし穴」。

についても同様に、シリアル化しても非常に安全な値を取得するためDateTimeに使用します。ToBinary()

doubleでは、 C#で値をシリアル化/逆シリアル化するための最良の方法は何ですか?

4

4 に答える 4

8

正確な値を解析して戻すには、ここG17に記載されているように、フォーマット指定子を使用する必要があります。

d.ToString("G17")

また

$"{d:G17}"

これは、.NETCore3.0より前のバージョンではラウンドトリップに失敗する可能性があることに注意してください。


以下の元の答え; 上記の"r"フォーマット指定子には実際にバグがあるため、ドキュメントが正しくありませんでした。


ラウンドトリップフォーマット指定子「r」double.Parse、文字列で使用すると、まったく同じ値が返されることを保証します。

d.ToString("r")
于 2012-06-28T00:22:20.043 に答える
2

チェックアウトXmlConvert.ToString(double value)

これも無限大を処理します。

値がDouble.PositiveInfinityまたはDouble.NegativeInfinityの場合、このメソッドはそれぞれ文字列INFまたは-INFを返します。

于 2012-06-28T00:20:13.320 に答える
1

BitConverter.GetBytes(myValue)精度を損なうことなくシリアル化できるバイト配列が得られます。

于 2012-06-28T00:19:57.990 に答える