C# 规范化系统。十进制带尾随零
我有一种非常简洁的方法来删除十进制值中的尾随零,但我更喜欢一种不涉及字符串往返的方法,就像我目前所做的那样。这是我当前的解决方案:C# 规范化系统。十进制带尾随零,c#,format,decimal,C#,Format,Decimal,我有一种非常简洁的方法来删除十进制值中的尾随零,但我更喜欢一种不涉及字符串往返的方法,就像我目前所做的那样。这是我当前的解决方案: var value = 0.010m; value = decimal.Parse(value.ToString("G29")); Console.WriteLine(value); // prints 0.01 (not 0.010) 所以它是有效的,但是你有更好的方法吗 另外,第二个问题是decimalValue.ToString()100%符合xs:deci
var value = 0.010m;
value = decimal.Parse(value.ToString("G29"));
Console.WriteLine(value); // prints 0.01 (not 0.010)
所以它是有效的,但是你有更好的方法吗
另外,第二个问题是decimalValue.ToString()100%符合xs:decimal?回答第二个问题,
System.XmlConvert.ToString(decimal value)
100%符合xs:decimal
这应该稍微快一点
public static decimal StripTrailingZeroes(this decimal value)
{
return decimal.Parse(value.ToString("G29", CultureInfo.InvariantCulture), CultureInfo.InvariantCulture);
}
数字存储为多少SF并不重要,重要的是输出时会发生什么 试一试
这里有一个新的想法:
public static class DecimalEx
{
public static decimal Fix(this decimal value)
{
var x = value;
var i = 28;
while (i > 0)
{
var t = decimal.Round(x, i);
if (t != x)
return x;
x = t;
i--;
}
return x;
}
}
这可能就行了。但是它很粗糙。需要测试并简化它。-当然,我可以反复截断和比较小数,直到值不再相等。至少(0.010m==0.01m)相关问题:最好的方法是使用Jon对相同问题的回答:谢谢Gabe&Thomas。这看起来就像我正在寻找的一样,虽然需要很多代码,但我会接受它。:-)可能重复的-这也有一个很好的答案:@Bent-对不起,我不能帮助解决原来的问题-我做了半次尝试来弄清楚
十进制
是如何工作的;它的文档记录得很差,修改int[4]
表示法似乎很棘手。我会将此作为一种扩展方法,并在以后遇到问题时对其进行优化;很可能这不是一个大的性能打击(听起来像过早优化)。我用最快的字符串往返法编辑了我的问题,应该是什么。这只是“我脑海中的碎片”问题:它不应该改变表示为字符串来去除尾随的零,所以它困扰着我,但你是非常正确的,它应该是正确的,这是最重要的。我知道它也会困扰我。看看我的一些字符串操作答案——我讨厌用字符串做事情。
public static class DecimalEx
{
public static decimal Fix(this decimal value)
{
var x = value;
var i = 28;
while (i > 0)
{
var t = decimal.Round(x, i);
if (t != x)
return x;
x = t;
i--;
}
return x;
}
}