gpt4 book ai didi

c# - 格式化十进制以在 XML 中使用并忽略文化

转载 作者:太空宇宙 更新时间:2023-11-03 18:30:02 27 4
gpt4 key购买 nike

我们需要将十进制值插入到 XML 文档中(由 XML 编写器完成),这工作正常。首先,我们使用 XmlConvert.ToString(myDecimalValue) 打印四位数的值。现在我们被迫总是使用两位数字,我们试图改变这一点,但到目前为止还没有成功。

首先,我们放弃了 XmlConvert 的使用,因为我们发现没有允许我们格式化小数的重载,所以我们尝试了 myDecimalValue.ToString("0.00"),它只打印两位数字,但将 . 替换为 ,,这在我们的例子中是无效的。

那么我们如何将像 25000.00m 这样的小数格式化为像 25000.00 这样的字符串呢? (四舍五入无关紧要,因为设置的值永远不会超过两位数)

编辑

decimal m_nAmt;
public decimal Amount
{
get
{
return m_nAmt;
}
set
{
if ((value < 0M) || (value > 999999999.99M))
{
throw new ArgumentOutOfRangeException();
}
if (SepaUtil.DecimalPlaces(value) > 2)
{
throw new ArgumentException();
}

m_nAmt = value;
}
}

写在哪里

// the original method
XmlConvert.ToString(m_nAmt);

这两个方法都是同一个类的成员;

这是一个写入 Xml 文件的值的例子

<InstdAmt Ccy="EUR">3360.0000</InstdAmt>
  • 需要注意的是,这是涵盖部分 SEPA 标准的类库的一部分,但作者不提供任何支持。*

编辑2

写入节点的示例。我使用立即窗口获取 ControlSum 属性 (System.Decimal) 的当前值和 XmlConvert 写入的值。结果是 XmlConvert 确实写了四位小数,尽管我无法确认在 LINQPad 中使用带有小数变量的 XmlConvert 时。其中一个区别是该库使用 .net 2.0

enter image description here

我的结论和解决方案

XmlConvert.ToString()decimalvalue.ToString() 似乎应用了四位小数,因为原始值有四个 0 SepaUtil.DecimalPlaces(value) 检查忽略了应用(因为 0 被忽略)并且没有显示在 VS2012 的“立即窗口”中。所以我改变了

 m_nAmt = value;

m_nAmt = Math.Round(value,2);

确保始终保留两位小数。这种方式将添加缺少的小数位,如果有更多则截断。

最佳答案

使用

myValue.ToString("0.00", CultureInfo.InvariantCulture);

这将始终以与语言无关的格式(基本上是英语)写入值。阅读时在任何 Parse()TryParse() 调用中使用相同的参数。

作为一般规则,所有 Parse()TryParse()ToString() 调用应该将 CultureInfo 参数指定为 CultureInfo.InvariantCultureCultureInfo.CurrentCulture。这可以防止在用户语言使用与开发人员不同的小数点时发生任何奇怪的错误。

关于c# - 格式化十进制以在 XML 中使用并忽略文化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24138772/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com