C# 如何检查小数点后的数值

C# 如何检查小数点后的数值,c#,C#,我试着在这里寻找一个类似的问题,但我只能找到如何计算小数位数 我想知道的是:如何找到大于0的小数位的值 例如,如果我们有: decimal value = 1.920m; decimal value2 = 1.900m; 如何检查小数点后的值是否>0 我希望能够对此进行检查并相应地限制显示,以便可以显示如下内容: 1.92 1.9 double x = 1.92; x-=(int)x; while(x%1>0){ x*=10; } Console.WriteLine(x); 基

我试着在这里寻找一个类似的问题,但我只能找到如何计算小数位数

我想知道的是:如何找到大于0的小数位的值

例如,如果我们有:

decimal value = 1.920m;
decimal value2 = 1.900m;
如何检查小数点后的值是否>0

我希望能够对此进行检查并相应地限制显示,以便可以显示如下内容:

1.92
1.9
double x = 1.92;
x-=(int)x;
while(x%1>0){
   x*=10;
}
Console.WriteLine(x);

基本上,您希望显示具有最大可用小数位数的值,并删除后面的零。这是最简单的方法:

Console.WriteLine(value.ToString("G29")); // Output 1.92
替代解决方案(与上述解决方案不同,适用于小于0.00001m的数字)。虽然这看起来不像以前使用G29的解决方案那样整洁,但它的效果更好,因为它还包括小于0.00001的数字:

Console.WriteLine(value.ToString("0.#############################"));  // Output 1.92
我们使用G29,因为29是小数点的最大可用位数。G或通用格式说明符用于定义结果字符串中可能出现的最大有效位数。使用此格式说明符截断任何尾随零。你可以阅读更多关于它的内容


如果我理解正确,你可以这样做:

1.92
1.9
double x = 1.92;
x-=(int)x;
while(x%1>0){
   x*=10;
}
Console.WriteLine(x);
输出:

92


现在,如果要转换为十进制,则只需使用此选项,即可检查此数字的内容

static decimal? RemoveTrailingZeros(this decimal? value)
{
    if (value == null) return null;

    var format = $"0.{string.Join(string.Empty, Enumerable.Repeat("#", 29))}";
    var strvalue = value.Value.ToString(format);
    return ConvertToDecimalCultureInvariant(strvalue);
}

static decimal? ConvertToDecimalCultureInvariant(this string value)
{
    decimal decValue;

    if (!decimal.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out decValue))
    {
        return null;
    }
    return decValue;
}
由于十进制的精度是29,因此
可枚举。重复(“#”,29)

并将其用作

var result = RemoveTrailingZeros(29.0000m);

您的问题已在此链接中得到解答:是的,对不起,我在搜索答案时错过了此链接。已标记为副本。谢谢。我现在正在使用.ToString(“0.######”)并且这正好显示了我想要它的方式:)我确实先尝试了这个,但之后无法运行我的程序。我一定是把它弄错了什么的。但谢谢你抽出时间,我很感激:)