如何比较两位小数到10位小数?

时间:2009-11-09 14:49:32

标签: .net decimal

我正在使用十进制类型(.net),我想看看两个数字是否相等。但我只想精确到小数点后10位。例如,取这三个数字。我希望他们都平等。

0.1123456789
0.11234567891
0.11234567899

10小数限制来自我的数据库,因此我必须假设第一个数字已经四舍五入,因此我不能简单地将其他数字舍入,因为最后一个数字将会四舍五入。

我真的只想截断10位小数,但看不到怎么做。

5 个答案:

答案 0 :(得分:11)

与比较浮点数的方法相同。这里有一些伪代码,因为我不知道.NET调用绝对值,但它基本上看起来像这样(修改常量以获得所需的精度):

if( Math.Abs( value1 - value2 ) < 0.0000000001 )
{
  // blah blah
}

答案 1 :(得分:6)

如果乘以10^10并删除小数部分呢?

decimal x2 = Math.Truncate(x * 10000000000);
decimal y2 = Math.Truncate(y * 10000000000);
Assert.Equals(x2, y2);

编辑:由Aaron的建议改为Math.Truncate。感谢。

答案 2 :(得分:1)

乘以10000000000,转换为int,然后除以相同的数字。

这样就可以截断多余的数字。

您可能需要添加.5 * 10 ^ -11才能在截断前正确舍入。

答案 3 :(得分:0)

乘以10 ^ 10 可能值得使用int64,而不是转换为整数(32位)。一个int 32有一个大约20亿的限制,当乘出时给出你的小数值在+2.1和-2.1之间的范围,int64有一个更大的范围,当乘出时给你一个大约+922,000,000的范围 - 小数值为922,000,000

http://msdn.microsoft.com/en-us/library/system.int32.aspx

http://msdn.microsoft.com/en-us/library/system.int64.aspx

答案 4 :(得分:-2)

也许这适合你:

If Decimal.Round(yourDec1, 10, MidpointRounding.AwayFromZero) = Decimal.Round(yourDec2, 10, MidpointRounding.AwayFromZero) Then

巴比