値を XML ドキュメントにシリアル化しています。をシリアル化するときはdouble
、精度が失われないこと、およびその文化が干渉しないことを確認したいと考えています。または、私が考えたことのない他の「落とし穴」。
についても同様に、シリアル化しても非常に安全な値を取得するためDateTime
に使用します。ToBinary()
double
では、 C#で値をシリアル化/逆シリアル化するための最良の方法は何ですか?
値を XML ドキュメントにシリアル化しています。をシリアル化するときはdouble
、精度が失われないこと、およびその文化が干渉しないことを確認したいと考えています。または、私が考えたことのない他の「落とし穴」。
についても同様に、シリアル化しても非常に安全な値を取得するためDateTime
に使用します。ToBinary()
double
では、 C#で値をシリアル化/逆シリアル化するための最良の方法は何ですか?
正確な値を解析して戻すには、ここG17
に記載されているように、フォーマット指定子を使用する必要があります。
d.ToString("G17")
また
$"{d:G17}"
これは、.NETCore3.0より前のバージョンではラウンドトリップに失敗する可能性があることに注意してください。
以下の元の答え; 上記の"r"
フォーマット指定子には実際にバグがあるため、ドキュメントが正しくありませんでした。
ラウンドトリップフォーマット指定子「r」はdouble.Parse
、文字列で使用すると、まったく同じ値が返されることを保証します。
d.ToString("r")
チェックアウトXmlConvert.ToString(double value)
これも無限大を処理します。
値がDouble.PositiveInfinityまたはDouble.NegativeInfinityの場合、このメソッドはそれぞれ文字列INFまたは-INFを返します。
BitConverter.GetBytes(myValue)
精度を損なうことなくシリアル化できるバイト配列が得られます。