在C#中从小数中删除任何尾随零

时间:2015-08-25 17:46:17

标签: c# decimal

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

我希望通过将十进制转换为字符串并仅使用基于找到小数点的子字符串以及小数点后面的内容是否为零来实现此目的。这就是我想出的:

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);

但这不起作用。它有什么问题?

3 个答案:

答案 0 :(得分:1)

ToString()可以做到这一点。这是怎么做的 -

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

如果你想摆脱所有的零只是这样做 -

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

因此,您可以在应用程序中将许多格式代码定义为常量,并根据需要使用它们......无需逻辑。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

我找到了解决方案。如果小数(转换为字符串时)中有一个小数点,则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);