C# 如何检查小数点后的数值
我试着在这里寻找一个类似的问题,但我只能找到如何计算小数位数 我想知道的是:如何找到大于0的小数位的值 例如,如果我们有: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); 基
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.######”)并且这正好显示了我想要它的方式:)我确实先尝试了这个,但之后无法运行我的程序。我一定是把它弄错了什么的。但谢谢你抽出时间,我很感激:)