MFC中怎么设置与控件关联的变量的小数点位数?

qingwen309 2012-03-30 07:40:20
我现在把EDIT1 和EDIT2 关联变量float型m_a,和m_b后,现在怎么改变它的小数点位数啊?急~~~~~~~~~
我是C++新人,麻烦了~~~
...全文
807 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
shixingzhao 2013-04-07
  • 打赏
  • 举报
回复
在LIST控件中显示数据,控制数据小数位数~~
wtl138 2012-05-08
  • 打赏
  • 举报
回复
给分哦
wtl138 2012-05-08
  • 打赏
  • 举报
回复 2
m_iEdit = a;
VarR8Round(a, 3, &m_dEdit1)
三表示小数点后三位
hdg3707 2012-04-11
  • 打赏
  • 举报
回复
这就是解决你的问题,你可以在你的工程里再加上SPIN.然后再按我给你的代码,考相应的部分就可以实现了
qingwen309 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

这是编辑框绑定SPIN控件,通过SPIN来按0.1增减,你还可以让SPIN按0.01增减,就看你设多少小数位了.同样,你还可以直接在编程框里输入浮点数
[/Quote]

请问可以解决我的问题吗?如果能,能不能具体地告诉我,初学C++,麻烦了
hxembed 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

引用 11 楼 的回复:
我也遇到同样的问题,就是用SPIN加减一个浮点数时,如1-0.1结果不等于0.9,等于0.900001

这是计算机表示浮点数时造成的,或者是浮点库造成的,你在显示时限制小数位就行了,比如%5.1f,%5.2f
[/Quote]
问题是我是直接关联Edit控件的,没有用格式化输出
hdg3707 2012-04-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
我也遇到同样的问题,就是用SPIN加减一个浮点数时,如1-0.1结果不等于0.9,等于0.900001
[/Quote]
这是计算机表示浮点数时造成的,或者是浮点库造成的,你在显示时限制小数位就行了,比如%5.1f,%5.2f
hxembed 2012-04-11
  • 打赏
  • 举报
回复
我也遇到同样的问题,就是用SPIN加减一个浮点数时,如1-0.1结果不等于0.9,等于0.900001
hdg3707 2012-04-08
  • 打赏
  • 举报
回复
上面是一个完整的工程,你可以按上面的代码生成一个工程,运行就知道了是什么功能
hdg3707 2012-04-08
  • 打赏
  • 举报
回复
这是编辑框绑定SPIN控件,通过SPIN来按0.1增减,你还可以让SPIN按0.01增减,就看你设多少小数位了.同样,你还可以直接在编程框里输入浮点数
ok1234567 2012-04-08
  • 打赏
  • 举报
回复
关联为CString类型的变量
读写的时候,做一下转换/格式化
向立天 2012-04-07
  • 打赏
  • 举报
回复
改变小数点位数?
应该没有这个功能
qingwen309 2012-04-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

在对话框的.CPP文件里:
void CSpinDotDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_Edit1);
DDX_Control(pDX, IDC_SPIN1, m_Spin1);
}

BEGIN_MESSAGE_……
[/Quote]

看不懂是什么意思?能解释一下吗?谢谢了
qingwen309 2012-04-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

那就不用使用变量关联了,变量关联就是这点麻烦。
将m_a、m_b声明称为C/C++ code
CEdit* pEdit_a; CEdit* pEdit_b;

在窗口初始化的时候,使用 C/C++ code
pEdit_a = ( CEdit* )GetDlgItem( IDC_EDITA );
(IDC_EDITA)是m_a对应的控件ID。同理pEdit_b也是一样的。
赋值的时候,……
[/Quote]

我在后面的编程中已大量使用了那些float型的变量计算,这样改的话后面的计算改起来会很麻烦的吧!?
hdg3707 2012-03-30
  • 打赏
  • 举报
回复
在对话框的.CPP文件里:
void CSpinDotDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_Edit1);
DDX_Control(pDX, IDC_SPIN1, m_Spin1);
}

BEGIN_MESSAGE_MAP(CSpinDotDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN1, &CSpinDotDlg::OnDeltaposSpin1)
END_MESSAGE_MAP()


// CSpinDotDlg 消息处理程序

BOOL CSpinDotDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

// 将“关于...”菜单项添加到系统菜单中。

// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
m_PrePos=0;
CRect rect,rect1;
GetDlgItem(IDC_EDIT1)->GetClientRect(rect);
GetDlgItem(IDC_EDIT1)->GetWindowRect(rect);
m_Spin1.GetClientRect(rect1);
ScreenToClient(rect);
m_Edit1=0.0f;
// m_Spin1.SetBuddy(GetDlgItem(IDC_EDIT1));//这句一定要去掉,在资源对话框里SPIN的属性里关于Buddy也要先FALSE;
m_Spin1.SetRange32(-100,100);
m_Spin1.SetPos(1);
m_Spin1.SetWindowPos(GetDlgItem(IDC_EDIT1),rect.right,rect.top, rect1.Width(),rect1.Height(),SWP_NOSIZE);
UpdateData(FALSE);
// TODO: 在此添加额外的初始化代码

return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}


void CSpinDotDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
CString str;
int pos,Delta;
pos=pNMUpDown->iPos;
Delta=pNMUpDown->iDelta;
UpdateData();
m_Edit1+=((float)Delta/10.0f);
str.Format("%5.1f",m_Edit1);
GetDlgItem(IDC_EDIT1)->SetWindowTextA(str);
m_PrePos=pos;
*pResult = 0;
}
在对话框里的.h文件:
// SpinDotDlg.h : 头文件
//

#pragma once
#include "afxcmn.h"


// CSpinDotDlg 对话框
class CSpinDotDlg : public CDialogEx
{
// 构造
public:
CSpinDotDlg(CWnd* pParent = NULL); // 标准构造函数
int m_PrePos;
// 对话框数据
enum { IDD = IDD_SPINDOT_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持


// 实现
protected:
HICON m_hIcon;

// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
float m_Edit1;
afx_msg void OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult);
CSpinButtonCtrl m_Spin1;
};
Tinary3v0 2012-03-30
  • 打赏
  • 举报
回复
那就不用使用变量关联了,变量关联就是这点麻烦。
将m_a、m_b声明称为
CEdit* pEdit_a; CEdit* pEdit_b;

在窗口初始化的时候,使用
pEdit_a = ( CEdit* )GetDlgItem( IDC_EDITA );
(IDC_EDITA)是m_a对应的控件ID。同理pEdit_b也是一样的。
赋值的时候,直接使用

float aa = 1263.23164691; CString str; str.Format( "%.4f", aa ); pEdit_a->SetWindowText( str );

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧