我正在尝试删除十进制值的最后一个零搜索,但是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
请帮助..
答案 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