将小数与一位小数进行比较?
Compare decimals to 1 decimal point?
我是 C# 的新手(来自 uni 的 Java/C++,所以我猜它并不是那么新)但是对于一个项目我需要比较小数。
例如
a = 1234.123
b = 1234.142
Decimal.Compare()
当然会说它们不一样,因为a比b小。我想做的是将它与第一个小数位(1 和 1)进行比较,这样它就会 return 为真。
我能想到的唯一方法是将其转换为使用 Decimal.GetBits()
,但我希望有一种我还没有想到的更简单的方法。
你可以round a decimal到一位小数,然后比较它们。
if (Decimal.Round(d1,1) == Decimal.Round(d2,1))
Console.WriteLine("Close enough.");
而且,如果舍入(使用默认中点处理)不是您想要的,Decimal
类型也可以与所有其他选项一起使用,就像我在 this earlier answer 中介绍的那样。
您可以使用 Math.Truncate(Decimal)
(MSDN)
Calculates the integral part of a specified decimal number.
编码示例。
Decimal a = 1234.123m;
Decimal b = 1234.142m;
Decimal A = Math.Truncate(a * 10);
Console.WriteLine(A);// <= Will out 12341
Decimal B = Math.Truncate(b * 10);
Console.WriteLine(B);// <= Will out 12341
Console.WriteLine(Decimal.Compare(A, B)); // Will out 0 ; A and B are equal. Which means a,b are equal to first decimal place
注意:这已经过测试和发布。
同样是简单的一行比较:
Decimal a = 1234.123m;
Decimal b = 1234.142m;
if(Decimal.Compare(Math.Truncate(a*10),Math.Truncate(b*10))==0){
Console.WriteLine("Equal upto first decimal place"); // <= Will out this for a,b
}
我是 C# 的新手(来自 uni 的 Java/C++,所以我猜它并不是那么新)但是对于一个项目我需要比较小数。
例如
a = 1234.123
b = 1234.142
Decimal.Compare()
当然会说它们不一样,因为a比b小。我想做的是将它与第一个小数位(1 和 1)进行比较,这样它就会 return 为真。
我能想到的唯一方法是将其转换为使用 Decimal.GetBits()
,但我希望有一种我还没有想到的更简单的方法。
你可以round a decimal到一位小数,然后比较它们。
if (Decimal.Round(d1,1) == Decimal.Round(d2,1))
Console.WriteLine("Close enough.");
而且,如果舍入(使用默认中点处理)不是您想要的,Decimal
类型也可以与所有其他选项一起使用,就像我在 this earlier answer 中介绍的那样。
您可以使用 Math.Truncate(Decimal)
(MSDN)
Calculates the integral part of a specified decimal number.
编码示例。
Decimal a = 1234.123m;
Decimal b = 1234.142m;
Decimal A = Math.Truncate(a * 10);
Console.WriteLine(A);// <= Will out 12341
Decimal B = Math.Truncate(b * 10);
Console.WriteLine(B);// <= Will out 12341
Console.WriteLine(Decimal.Compare(A, B)); // Will out 0 ; A and B are equal. Which means a,b are equal to first decimal place
注意:这已经过测试和发布。
同样是简单的一行比较:
Decimal a = 1234.123m;
Decimal b = 1234.142m;
if(Decimal.Compare(Math.Truncate(a*10),Math.Truncate(b*10))==0){
Console.WriteLine("Equal upto first decimal place"); // <= Will out this for a,b
}