2

XmlSerializer を使用して、10 進数を含む C# オブジェクトを xml の文字列にシリアル化しています

例えば

AnObject.ADecimalValue

以下のように明示的に丸めたとしても、精度が特に変化していることがわかります。たとえば、12564.39 は 12564.3900 として出力されます。

AnObject.ADecimalValue = decimal.Round(AnObject.ADecimalValue, 2);

シリアライズコードは以下です。

   XmlSerializer serializer = new XmlSerializer(typeof(AnObject));

    using (StringWriter writer = new StringWriter())
    {
        serializer.Serialize(writer, source);

        string result = writer.ToString();

        return result;
    }

小数点の後に 2 つの値のみが出力されるようにするにはどうすればよいですか

4

3 に答える 3

2

オブジェクトをシリアル化する方法を再定義するために実装できますIXmlSerializableか?

ドキュメンテーションはこちら、実装方法の詳細はこちら

それから、あなたと同様の(しかし関連ではない)問題を抱えている誰かによる投稿がここにあります。小数を正しく丸め、それが機能するかどうかを確認できます。そうでない場合は、文字列として書き出すことができます。

于 2012-04-26T12:45:16.133 に答える
2

浮動小数点数の丸めがこれに役立つとは思いません。シリアライザーは、独自のルールに従って数値を文字列に変換します。あなたができる最善の方法は、新しい文字列プロパティを導入し、その中で数値をフォーマットして、元の数値の代わりにシリアル化することです。

トピックの詳細、同様の問題: Datetime の XmlSerialization の形式を指定できますか?

于 2012-04-26T09:12:07.420 に答える
2

これが私が同様の問題をどのように解決したかであり、それは私にとって完璧に機能しています。

    private decimal  price;

    [XmlElement(DataType="decimal")]
    public string  Price
    {
        get { return price.ToString("c"); }
        set { price = Convert.ToDecimal(value); }
    }

私の場合は通貨に変換しましたが、 price.ToString("0.00") を使用して XML 要素をゼロ 2 個の 10 進数に変換できます。

于 2015-09-23T00:14:27.640 に答える