我试图删除十进制值的最后一个零搜索的最后一个零,但是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
请帮助..
尝试以下:
decimal num = 50.00m;
decimal num2 = 50.01010100m;
Console.WriteLine(num.ToString("0.00#########"));
Console.WriteLine(num2.ToString("0.00#########"));
输出:
50.00
50.010101
(如" Alex"one_answers" Erno de Weerd"的评论中的建议)
您可以使用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());
您可以尝试
double num = 50.010110000;
Console.WriteLine(num.ToString("0.0000", CultureInfo.InvariantCulture) );
请参阅此信息有关更多信息https://larch.microsoft.com/en-us/dotnet/standard/bask-types/custom-numeric-format-sintrings#specifierpt`
您可以尝试这样的东西
public decimal removeTrailingZeros(decimal val)
{
return val % 1 == 0 ? Math.Round(val, 2) : val / 1.0000000000000000000000000000000000m;
}
测试输入
50.00000000m,50.01000000m,50.01010000m,50.01011000m,50.01010100m,
输出
50.0050.0150.010150.0101150.010101