您的位置:首页 > 其它

MFC编辑框设置,输入、输出数据最多保留5位小数

2016-03-22 10:57 281 查看
       1.获取文本改变(输入更多字符时)的消息时,获取输入的内容,判断小数点后位数(笨办法是查找小数点位置),如果超出要求,就通过sprintf使用%.5f这样的办法,把输入的数字改为符合需求的格式,然后更新编辑框里面的文本。

      2.双击Edit控件,添加消息处理函数,将上面这段代码放在里面.可以这样(Unicode版本)
CString strText, strTemp;
// 为edit控件绑定变量m_EditText
//获取控件的内容
m_EditText.GetWindowText(strText);
//定位小数点
int nPos = strText.Find(_T('.'));
if(n != -1)
{
//获取小数点后面的数据
strTemp = strText.Mid(n+1);
//如果长度大于5,则忽略后面的数据
if(strTemp.GetLength() > 5)
{
strText.Format(_T("%.5f"), _tstof(strText.GetBuffer()));
strText.ReleaseBuffer();
m_EditText.SetWindowText(strText);
}
} ---------------------------------------------------------------------------------------------------------------------------------------
这涉及2种作法

1、直接有接收框的事件处理中进行输入限制,当输入长度超过时禁止再输入。此法的缺点的编程较复杂,必须处理好各个输入事件。

2、在输入结束离开接收框时处理,即后处理。此法优点是处理简单。  

------------------------------------------------------------------------------------------------------------------------------------------------

    我是这样想的:给编辑框设置一个成员变量m_aa,再定义一个CString str,通过str.Format()来实现格式化输出,在编辑框失去焦点时触发事件。代码是这样的:

void CCurve_testDlg::OnKillfocusEdit1()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

float naa; //编辑框输入值

CString str; //定义一个字符串型变量

naa=m_aa;

str.Format(_T("%.5f"),naa); //格式化输出,%.5f是指保留小数点后5位小数

m_aa=atof(str); //将转化后的值显示在编辑框上

UpdateData(FALSE);

}

可是在使用的时候遇到了问题,界面上有三个编辑框(m_aa,m_bb,m_cc),对每个编辑框采取以上处理,只有第一个编辑框实现了小数点后保留5位小数,而其他两个编辑框都无法实现(第二个编辑框小数点后保留了4位小数,第三个保留了3个小数,这样递减)。我不知道这是什么原因。。。



-------------------------------------------------------------------------------------------------------------------------------

     这个是我按照你的思路写出来,基本没有区别,也实现了你想要
4000
的功能

UpdateData(TRUE);

float naa = m_aa;

CString str;

str.Format(_T("%.5f"), naa);

m_aa = _tstof(str.GetBuffer());

str.ReleaseBuffer();

UpdateData(FALSE);

你可以检查一下三个控件变量,看看有什么问题没有,比如设置断点看看,是否获取到了你输入的值,而这个值又是在哪里被改写了。

----------------------------------------------------------------------------------------------------------------------

编写一个EDIT类,里面加判断,你这样写的话有很多BUG,比如可用输入字母、输入多个小数点、输入多个符号,还有中文等等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: