在dialog面版里放了2个编辑框:edit1 和edit2。分别添加了两个double类型的变量d1,d2,要求在edit1中输入带小数点的数值时,edit2能同时显示经过计算后的double类型结果
响应edit1的onchange消息使用UpdateData(TRUE)和UpdateData(FALES)未果,因为总是吞掉小数点,不只有什么有效的办法无?

解决方案 »

  1.   

    把d2设置为CString就可以了
      

  2.   

    在说一下,edit1和edit2都要能够接受数据输入,并且要相互实时响应(就是没敲如一个阿拉伯数字或小数点都要做出反应),并且问题是出在接受屏幕输入的编辑框中
      

  3.   

    你的估计是当你按下小数点时,不能处理,其他情况应该都还好,是吧?如果是,那就OnChange()消息中,先用GetWindowText()获取该CEdit中的数据(成为CString),判断最后一位是不是小数点,如果是,就UpdateData()获取数字后,增加小数点并在后面增加一个0,然后就应该不会丢失小数点了这是一个思路,没有测试,仅供参考
      

  4.   

    吞掉小数点是因为editbox不支持浮点数,你得当做字符串处理,转换为浮点数运算,然后再转回字符串就可以了
      

  5.   

    使用字符串变量或者是float型的变量!
      

  6.   

    double型的确实存在最后一位的误差,所以在进行double型数据是否相等判断的时候一定要使用类似下面的判断:
    fabs(d1-d2)< 允许误差值
      

  7.   

    是的!你把变量类型定义为CString就可以了,因为你定义的是数值型,
    而又要求实时响应就出问题了,当你输入小数点时也触发UpdateData()
    函数了,这时判断不是有效的数值就会截取了,如果你不是实时就不会
    又问题
      

  8.   

    To:  fengqinggao(风清高)按你的思路,其实有一个更好的办法就是当判断出是输入小数点时,不更新数据,这对程序无影响
    因为100跟100.理论上是相等的,但这样还是存在一个问题就是
     当编辑框中的数值只有以为小数时,如100.1,按←键,会一下清除2位并且光标移到数字前面
    变成 |100 ,不只有没有办法控制一下光标?
      

  9.   

    TO: 所有的建议转成String处理的同志们
      不是我没考虑过,但这样增加了编程难度,包括对输入字符的检测/输入数值范围的检测/以及取得字符串后向double型变量的转换/计算完毕后从double向string的转换
      想一想头都大了
      

  10.   

    呵呵,楼主的方法的确比我的强些,因没测试,所以疏忽了。如果只有设置光标的问题没有解决了,很容易:
    int iLength = m_wndEdit1.LineLength(-1);
    m_wndEdit1.SetSel(iLength, iLength);就可以了
      

  11.   

    谢谢 fengqinggao(风清高) 
    实在是没办法了,改用字符串了:(加了n行检测代码(n>100),不过效率还行,感觉不到迟钝