c# 判断语句,double 精度问题
doubleaa=0.09;doublebb=0.11;doublecc=0.02;if(bb-aa==cc){Console.WriteLine("cha{0}:","...
double aa = 0.09;
double bb = 0.11;
double cc = 0.02;
if (bb - aa == cc)
{
Console.WriteLine("cha{0}:", "1111");
}
这句为什么返回的是 假,
如何解决呢?
那我把上面的 double 类型 换成了,decimal为什么就好了呢?
这又是为什么呢?
我的意思就是 bb-aa的值 要“小于等于” cc 可是等于的时候条件语句为假不执行了,所以我觉得【davidrin】的方法不好用。
【h123a】的方法我觉得很好,但是也有一个问题,我举例子的小数是只有两位,如果换成更多位数的话怎么半呢?bb aa 是由两个整数相除得到的。
decimal aa = 0.09;
decimal bb = 0.11;
decimal cc = 0.02;
if (bb - aa == cc)
{
Console.WriteLine("cha{0}:", "1111");
} 展开
double bb = 0.11;
double cc = 0.02;
if (bb - aa == cc)
{
Console.WriteLine("cha{0}:", "1111");
}
这句为什么返回的是 假,
如何解决呢?
那我把上面的 double 类型 换成了,decimal为什么就好了呢?
这又是为什么呢?
我的意思就是 bb-aa的值 要“小于等于” cc 可是等于的时候条件语句为假不执行了,所以我觉得【davidrin】的方法不好用。
【h123a】的方法我觉得很好,但是也有一个问题,我举例子的小数是只有两位,如果换成更多位数的话怎么半呢?bb aa 是由两个整数相除得到的。
decimal aa = 0.09;
decimal bb = 0.11;
decimal cc = 0.02;
if (bb - aa == cc)
{
Console.WriteLine("cha{0}:", "1111");
} 展开
8个回答
展开全部
double aa = 0.09;
double bb = 0.11;
double cc = 0.02;
if (bb*100 - aa*100 == cc*100)
{
Console.WriteLine("cha{0}:", "1111");
}
用乘以10的几次方的方法,把小数都变成整数,然后在判断。
这是因为计算机是2进制的关系,所以小数总是存在着精度问题,这时可以把小数都变成整数,然后再判断。
double bb = 0.11;
double cc = 0.02;
if (bb*100 - aa*100 == cc*100)
{
Console.WriteLine("cha{0}:", "1111");
}
用乘以10的几次方的方法,把小数都变成整数,然后在判断。
这是因为计算机是2进制的关系,所以小数总是存在着精度问题,这时可以把小数都变成整数,然后再判断。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不要用非整数进行等价判断,因为计算机无法准确的处理小数
可以把double*100 然后转换为整数判断
可以把double*100 然后转换为整数判断
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我在.NET4下测试,如果是输出bb-aa和cc都是0.02,就是在if比较时候就有问题了...
扩大10n倍数,我认为不是什么明智之举。
我认为可以ToString比较,可以将一个double直接变成一个字符串
如: double x=3.14159000 // 3.14159,而不是3.14159000
扩大10n倍数,我认为不是什么明智之举。
我认为可以ToString比较,可以将一个double直接变成一个字符串
如: double x=3.14159000 // 3.14159,而不是3.14159000
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果你觉得【h123a】的方法好 又担心多位小数的话
你可以不乘100 小数点有几位你就乘1后面有几个0
用indexof(".") 来取小数点后有几位
你可以不乘100 小数点有几位你就乘1后面有几个0
用indexof(".") 来取小数点后有几位
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询