2

我正在使用 XmlSerializer 将包含小数的 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;
    }

如何确保在小数点后只输出两个值

4

3 回答 3

2

你能实现IXmlSerializable重新定义你如何序列化你的对象吗?

此处的文档以及如何在此处实现它的详细说明。

然后这里有一个与您有类似(但不相关)问题的人的帖子。你可以正确地四舍五入你的小数,看看它是否有效,如果没有,那么你可以把它写成一个字符串。

于 2012-04-26T12:45:16.133 回答
2

我不认为四舍五入一个浮点数可以帮助这一点。序列化程序根据自己的规则将数字转换为字符串。您可以做的最好的事情是引入一个新的字符串属性,并将其中的数字格式化并序列化它而不是原始数字。

有关该主题的更多信息,类似问题: 您可以为日期时间的 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 个零的十进制。

于 2015-09-23T00:14:27.640 回答