none
关于字符串转化的问题以及保留小数点的问题,谢谢! RRS feed

  • 问题

  •  

    我用的EIDT定义成员变量为string 型,有这么几个问题:

    1.我想在用户输入数字的时候,比如输入123.456,我只想取小数点后两位,我用了下面的方法:

     float fElec;

     fElec = atof(m_SetElec);
     m_SetElec.Format("%0.2f",fElec);
     fElec = atof(m_SetElec);

     

    结果,fElec 最后还是三位小数,怎么做才对呢?

     

    2.由于是往电表里面写数据,帧流最多支持 999999.99 度,如何判断输入的度数比这个小?(还是cstring型的edit).

     

    我刚刚接触VC,问的问题可能比较幼稚,希望能得到大家的帮助,谢谢大家~

    2008年8月22日 0:17

答案

  • 新建一个对话框程序,加入一个Edit控件,一个Button控件。

    为Edit控件关联了一个CString类型的变量,名称是m_strEdit

     

    响应Button的单击消息,响应函数的代码如下:

    Code Snippet

    void Ctest2Dlg::OnBnClickedButton1()
    {
       float fValue ;
       UpdateData(TRUE) ;
       fValue = _tstof((LPCTSTR)m_strEdit) ;
       m_strEdit.Format(_T("%0.2f"), fValue) ;
       UpdateData(FALSE) ;
    }

     

     

    编译运行,在编辑框里输入1234.5678,再单击Button,而编辑框里的数字就变成1234.57

    这也就说明实现了你说的保留两位小数的问题。

     

    对比一下你代码和我的代码,你会发现CString的Format这里没有什么问题。我想你说不能保留两位小数,问题可能出在float这个变量本身上,你可能有其它地方有问题。

     

    我用的是Visual Studio .NET 2008 所以我默认使用了UNICODE和TCHAR。在我的代码里_tstof就类似于你的atof,_T是一个宏,主要是用于在编译时切换UNICODE和ANSI的,这些你也可以不用去理会。

     

    第二个事,你说要判断小于某个数,你看一下我的程序fValue这个值,你想一下,你都得到Edit的float值了,要判断,只要用C语言的语法<(小于号)一下就可以解决了呀。VC想现学现用,可有难度了,这个事我想也不完全是技术问题吧。

    2008年8月22日 3:07

全部回复

  • 新建一个对话框程序,加入一个Edit控件,一个Button控件。

    为Edit控件关联了一个CString类型的变量,名称是m_strEdit

     

    响应Button的单击消息,响应函数的代码如下:

    Code Snippet

    void Ctest2Dlg::OnBnClickedButton1()
    {
       float fValue ;
       UpdateData(TRUE) ;
       fValue = _tstof((LPCTSTR)m_strEdit) ;
       m_strEdit.Format(_T("%0.2f"), fValue) ;
       UpdateData(FALSE) ;
    }

     

     

    编译运行,在编辑框里输入1234.5678,再单击Button,而编辑框里的数字就变成1234.57

    这也就说明实现了你说的保留两位小数的问题。

     

    对比一下你代码和我的代码,你会发现CString的Format这里没有什么问题。我想你说不能保留两位小数,问题可能出在float这个变量本身上,你可能有其它地方有问题。

     

    我用的是Visual Studio .NET 2008 所以我默认使用了UNICODE和TCHAR。在我的代码里_tstof就类似于你的atof,_T是一个宏,主要是用于在编译时切换UNICODE和ANSI的,这些你也可以不用去理会。

     

    第二个事,你说要判断小于某个数,你看一下我的程序fValue这个值,你想一下,你都得到Edit的float值了,要判断,只要用C语言的语法<(小于号)一下就可以解决了呀。VC想现学现用,可有难度了,这个事我想也不完全是技术问题吧。

    2008年8月22日 3:07
  • 1.

    float fElec;

    int iTemp = 0;

    int iXiaoshu = 0;

    int iZhengshu = 0;

    CString strZhengshu = _T("");

    CString strXiaoshu = _T("");

     fElec= atof(m_SetElec);

    iTemp = fElec*100;

    iZhengshu = iTemp / 100;

    iXiaoshu = iTemp % 100;

    strZhengshu.Format("%d", iZhengshu );

    strXiaoshu.Format("%d", iXiaoshu );

    strZhengshu = strZhengshu + _T(".") + strXiaoshu;
      fElec = atof(strZhengshu );

     

    2.将浮点数扩大100倍转换成整数比较大小

    2008年8月22日 3:13
    版主
  • 推荐将float扩大成整数再比,float比大小很不可靠,特别是跟0比

    2008年8月22日 9:23