从十进制值的末尾删除0

Fif*_*fty 15 c# decimal

我有一个十进制值,后面有一个可变位数.,例如:

0.0030
0.0310
0.0001
1.1200
Run Code Online (Sandbox Code Playgroud)

如何编写一个在小数结尾处删除0的动态函数?

Tho*_*rna 28

你也可以修改小数本身,这样任何ToString()都会给你你想要的东西(我在这里回答的更多细节):

public static decimal Normalize(decimal value)
{
    return value/1.000000000000000000000000000000000m;
}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案拥有,因为基本上不同于这个问题(甚至整个主题)的其他答案实际上是工作,并做OP所要求的.有点可耻地看到所有这些高级代表用户在没有阅读/理解问题的情况下急于回答,并从一些甚至无效的东西中获得所有的赞成. (8认同)

Jon*_*röm 20

string.Format("{0:0.#####}", 0.0030)
Run Code Online (Sandbox Code Playgroud)

要么

var money=1.3000m;
money.ToString("0.#####");
Run Code Online (Sandbox Code Playgroud)

为了将来参考,我推荐John Sheehan撰写的.NET格式字符串快速参考.

  • @ andrew-m是的#是一个数字占位符.在大多数情况下,您知道所需的精度是多少.如果您不这样做,并且希望绝对确定您可以使用当前使用的数据类型的完整精度.`decimal`可以容纳28-29个有效数字.Hacky解决方案:`.ToString("0.".PadRight(29,'#'))` (3认同)
  • 是的,但如果您可能有6位小数或7位呢?你最终得到一个猜测的丑陋的#字符. (2认同)
  • 这将数字四舍五入到最接近的千分之一.这可能是也可能不是OP想要的...... (2认同)

And*_*w M 9

decimal value = 0.0030m;
value.ToString(“G29?);
Run Code Online (Sandbox Code Playgroud)

编辑: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.#######"));
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)