我正在使用XmlSerializer将包含小数的C#对象序列化为xml字符串
e.g。
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;
}
如何确保小数点后只输出两个值
答案 0 :(得分:2)
您是否可以实施IXmlSerializable
来重新定义对象的序列化方式?
然后有一个帖子here由某个与您有类似(但没有相关)问题的人发布。你可以正确地舍入你的小数,看看是否有效,如果没有,那么你可以把它写成一个字符串。
答案 1 :(得分:1)
我不认为舍入浮点数可以帮助这个。序列化程序根据自己的规则将数字转换为字符串。您可以做的最好的事情是引入一个新的字符串属性,并格式化该数字并将其序列化而不是原始数字。
有关该主题的更多信息,类似问题: Can you specify format for XmlSerialization of a datetime?
答案 2 :(得分:1)
以下是我解决类似问题的方法,它对我来说非常有效。
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个零的十进制数。