在c#里面有没有函数判断一个变量是否有小数
解决方案 »
- c#打印出两个菱形在控制台同一高度位置。(就是一左一右)
- 求一个emacs.vsk文件:)
- XtraReport 动态载入模版后 主从表绑定数据源问题!(顶者有分)
- dataGrid问题与dataAdapter有关
- 小弟做了一个实时监控的程序(ASP.NET.C#.B/S),想在发现异常情况时播放一个告警音,请问应该怎么实现?要用什么组件呢?
- TextBox自定义控件如果调用其刷新过程
- RTrim和LTrim,怎么不起作用?SQL小问.
- 载入XML文件时如何自动忽略XML中的注释?
- 请教一个问题
- 大家都有来讨论一下
- 线程、dataGrid、datasource,datatable的冲突问题????????????如何解决
- C#怎样和一个DDE服务进行通讯?
if ((int)abc == abc)
{
//abc小数部分没有有效数字
}
if (abc.ToString().Split(new char[]{'.'}).Length > 1)
{
MessageBox.Show("sdaf");
}
double abc = 1.1;
if (abc.ToString().IndexOf(".") == -1)
{//abc小数部分没有有效数字
}
看成有没小数点了....回复人: fancyf(凡瑞) 正解
Console.WriteLine(abc%1>0?"Y":"N");
if ((int)abc == abc)
{
Console.WriteLine("Yes!");
}
else
{
Console.WriteLine("No!");
}运行结果是:N
Yes!
取模的算法正确算出abc是含有小数,而取整对比的方法判定错误!!!原理吗:double数"0"不一定等于int数"0"啊!
你检测的方法本身就是错误的,你给的数字已经超出了double的精度,电脑中根本没法保存你那个常数。
不信你用你的abc跟
double def = 1.0D;
比较一下,看看是不是
abc == def然后再来说我的解法有没有错
不过其中说明了double浮点数的标准IEC 60559:1989 (IEEE 754),建议你了解一下浮点数在内存中的结构我再来说一下
double的0:
double d = 0;
在内存中是精确存储的,没有丝毫的误差,在任何时候都准确的等于下面的n
int n = 0;
因此“double数"0"不一定等于int数"0"”这句话是错误的,double数"0"在任何情况下都等于int数"0"double表示大多数的数会有误差,可是不代表double类型的所有数都有误差,像前面的0,以及一些小的整数,比如1、2、1000等double是完全精确的存储的,可以用==来与整数进行比较,不会有误差。
一些小数,象0.25,1.5之类也是精确存储的
double d1 = 0.25
double d2 = 1.0/4;
这时d1严格与d2相等,一点近似也没有。但是Jamestan(情商蛋蛋)你说的不是完全没有道理,在进行运算的时候绝大多数的浮点数不能被精确存储,因此大多数情况下不应该对double用==运算,但这并不是绝对的
在.NET中,double的0一定等于int的0,没有任何例外情况因此我前面的判断(int)abc == abc是没问题的,只要abc小数部分有值,无论绝对值多么小,只要是电脑中能用double表示出来的,这个式子就不成立。反过来,只要abc小数部分严格等于0,并且整数部分没有超过int的范围,这个式子保证成立,没有“不一定”的可能性。
Console.WriteLine(abc%1>0?"Y":"N");上面这个数字用你的办法就没办法出来结果了......
就算把(int)换成(long)也不行。BTW:其实我的算法也有误,应该改成:abc%1==0?"N":"Y"