在c#中删除小数点后面的任何零

本文关键字:任何零 小数点 删除 | 更新日期: 2023-09-27 18:09:43

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

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

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

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

在c#中删除小数点后面的任何零

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

ToString()可以做到这一点。以下是如何做到这一点-

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

如果你想去掉所有的0就像这样-

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

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

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