从 C# 中的小数中删除所有尾随零

Removing any trailing zeros from a decimal in C#

我的程序中有一个小数点,小数点后可能有尾随零,我想去掉它们。

我希望通过将小数转换为字符串并仅根据找到小数点的位置以及小数点后的内容是否为零来使用子字符串来实现此目的。这是我想出的:

string number = Convert.ToString(MyDouble);
if (number.Contains("."))//If there are trailing zeros
{
    //If the numbers after the decimal point (when taken as an integer) equal 0
    if(Convert.ToInt16(number.Substring(number.IndexOf("."))) == 0)
    {
        //Remove anything after the decimal point
        number = number.Substring(0, number.Length - number.IndexOf("."));
    }
}
result = Convert.ToDecimal(number);

但这行不通。怎么了?

ToString() 可以解决问题。这是如何做到的 -

     decimal a = 122.00000m;
     string trimmed = a.ToString("#.00");

如果你想去掉所有的零,就这样做-

    decimal a = 122.00000m;
     string trimmed = a.ToString("#");

所以你可以在你的应用程序中定义很多格式代码作为常量,并根据需要使用它们......不需要逻辑。

Linq 使这变得非常简单(如果您不想转换值):

using System;
using System.Linq;
                    
public class Program
{
  public static void Main()
  {
    var a = "10.001000";
    var b = a.Reverse().SkipWhile(i => i == '0').Reverse();
    var c = new String(b.ToArray());
        
    Console.WriteLine(a);
    Console.WriteLine(c);
  }
}

结果:

10.001000

10.001

我找到了解决办法。如果小数(当转换为字符串时)中有小数点,则 while 循环会一直删除最后一个字符,最后一个字符为 0。

string number = Convert.ToString(MyDouble);
if (number.Contains("."))
{
    while(number.Substring(number.Length - 1) == "0")
    {
        number = number.Substring(0, number.Length - 1);
    }
}
result = Convert.ToDecimal(number);