我有一个十进制值,小数点后面的数字是可变的,例如:
0.0030
0.0310
0.0001
1.1200
我该如何编写一个动态函数,以去除十进制数末尾的0?
你也可以修改小数本身,这样任何ToString()方法都会给你想要的结果(更多详细信息请参见我的答案这里):
public static decimal Normalize(decimal value)
{
return value/1.000000000000000000000000000000000m;
}
string.Format("{0:0.#####}", 0.0030)
或者var money=1.3000m;
money.ToString("0.#####");
为了以后的参考,我建议使用John Sheehan编写的.NET格式字符串快速参考。
decimal
可以容纳 28-29 个有效数字。巧妙的解决方案:.ToString("0.".PadRight(29,'#'))
- Jonas Elfströmdecimal value = 0.0030m;
value.ToString(“G29″);
编辑:G格式化程序确实有效,唯一的问题是如果原始十进制数中有太多有效数字,它就会跳转到科学计数法。这并不理想。
请参阅此处的“常规(“G”)格式说明符”文档:http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx#GFormatString
我在午餐时间进行了一次小测试:
decimal d1 = 0.000100m;
decimal d2 = 0.001000000000000000000000m;
decimal d3 = 0.000000000000001000000000m;
Console.WriteLine(Environment.NewLine + "input decimal: 0.000100m");
Console.WriteLine("G " + d1.ToString("G"));
Console.WriteLine("G29 " + d1.ToString("G29"));
Console.WriteLine("0.####### " + d1.ToString("0.#######"));
Console.WriteLine(Environment.NewLine + "input decimal: 0.001000000000000000000000m");
Console.WriteLine("G " + d2.ToString("G"));
Console.WriteLine("G29 " + d2.ToString("G29"));
Console.WriteLine("0.####### " + d2.ToString("0.#######"));
Console.WriteLine(Environment.NewLine + "input decimal: 0.000000000000001000000000m");
Console.WriteLine("G " + d3.ToString("G"));
Console.WriteLine("G29 " + d3.ToString("G29"));
Console.WriteLine("0.####### " + d3.ToString("0.#######"));
输出:
input decimal: 0.000100m
G 0.000100
G29 0.0001
0.####### 0.0001
input decimal: 0.001000000000000000000000m
G 0.001000000000000000000000
G29 0.001
0.####### 0.001
input decimal: 0.000000000000001000000000m
G 0.000000000000001000000000
G29 1E-15
0.####### 0
嗯,这是一个显示格式问题(将十进制转换为字符串时会添加零)。
您需要查看代码中何处出现尾随零。是在调用.ToString()之后吗?尝试使用不同的格式字符串进行实验:
.ToString("#");
.ToString("0.00");
.ToString("#.##");
等等。 最好的方法就是尝试不同的可能值。
decimal m = 0.030000m;
Console.Write(m.ToString("0.##########"));
确保你有足够的#来显示你想要的小数位数。
if (value is Decimal)
value = ((Decimal)value).ToString("0.".PadRight(29, '#'), culture);
public static string GentlyRemoveEndZeros(string input)
{
// if (input == null) return null;
// if (input == "") return "";
if (input.Contains(".")) return input.TrimEnd('0').TrimEnd('.');
return input;
}