如何删除十进制的最后一个零

时间:2017-10-04 07:55:26

标签: c#

我正在尝试删除十进制值的最后一个零搜索,但是web和堆栈中的所有答案都会删除所有零。我的目标是在最后显示一些零。

Sample
50.00000000
50.01000000
50.01010000
50.01011000
50.01010100

expected 
    50.00
    50.01
    50.0101
    50.01011
    50.010101

我不知道如何在c#中做到这一点。

我尝试过很多像.ToString("G29")这样的事情;和其他答案可用,但它都给我喜欢

50.00
50.01
50.01
50.01
50.01

请帮助..

4 个答案:

答案 0 :(得分:4)

试试这个:

decimal num = 50.00m;
decimal num2 = 50.01010100m;
Console.WriteLine(num.ToString("0.00#########"));
Console.WriteLine(num2.ToString("0.00#########"));

输出:

50.00
50.010101

(与#34; Alex"和#34; Erno de Weerd")的评论中的建议一样。

答案 1 :(得分:3)

您可以使用TrimEnd删除最后一个零:

decimal num = 50.01011000m;

if (num % 1 == 0)
{
    return num.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture);
}       
string str = num.ToString().TrimEnd('0');

Console.WriteLine(str);

输出:

  

50,01011

您也可以将其打包成扩展方法:

public static class Extensions
{
    public static string ToTrimmendString(this decimal num)
    {
        if (num % 1 == 0)
        {
            return num.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture);
        }
        return num.ToString().TrimEnd('0');
    }
}

并将其称为:

Console.WriteLine(num.ToTrimmendString());

答案 2 :(得分:0)

你可以尝试

    double num = 50.010110000;
    Console.WriteLine(num.ToString("0.0000", CultureInfo.InvariantCulture) );

请参阅此内容以获取更多信息https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings#SpecifierPt`

答案 3 :(得分:0)

你可以尝试这样的事情

public decimal removeTrailingZeros(decimal val)
{
    return val % 1 == 0 ? Math.Round(val, 2) : val / 1.0000000000000000000000000000000000m;
}

测试输入

50.00000000米, 50.01000000米, 50.01010000米, 50.01011000米, 50.01010100米,

输出

50.00 50.01 50.0101 50.01011 50.010101