我正在使用十进制类型(.net),我想看看两个数字是否相等。但我只想精确到小数点后10位。例如,取这三个数字。我希望他们都平等。
0.1123456789
0.11234567891
0.11234567899
10小数限制来自我的数据库,因此我必须假设第一个数字已经四舍五入,因此我不能简单地将其他数字舍入,因为最后一个数字将会四舍五入。
我真的只想截断10位小数,但看不到怎么做。
答案 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
答案 4 :(得分:-2)
也许这适合你:
If Decimal.Round(yourDec1, 10, MidpointRounding.AwayFromZero) = Decimal.Round(yourDec2, 10, MidpointRounding.AwayFromZero) Then
巴比