格式化的天气.TextCtrl只有数字值-浮点精度
Formatting wx.TextCtrl with numeric values only - float precision
我创建了一个简单的应用程序,它使用wxFILTER_NUMERIC的裸TextCtrl小部件,以便只接受数值(见下面的代码)。
我希望值有一个固定的显示精度,而不管用户如何输入它们(例如,在指定17.0或17.000000值的情况下,将始终显示17.0000)。我发现在wxPython中有一个选项可以使用派生的NumCtrl小部件(http://wxpython.org/docs/api/wx.lib.masked.numctrl-module.html)来完成这项工作,但我在基本的wxWidgets库中找不到它。
所以,是否有一个现成的解决方案,这个可用的地方,我根本找不到,或者我必须写一个函数,将改变数字的格式,一旦它被插入(处理EVT_TEXT和EVT_TEXT_ENTER事件和修改输入字符串)?
目前为止我有什么:
事件表
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Quit, MyFrame::OnQuit)
EVT_MENU(ID_About, MyFrame::OnAbout)
EVT_TEXT(ID_textBox, MyFrame::ValueChanged)
EVT_TEXT_ENTER(ID_textBox, MyFrame::ValueChanged)
END_EVENT_TABLE()
MyFrame内文本框的实现
wxPanel *panel = new wxPanel(this, -1);
_textBox1 = new wxTextCtrl(panel,
ID_textBox,
"0.0000",
wxPoint(100, 100),
wxSize(80,20),
wxTE_PROCESS_ENTER,
wxTextValidator(wxFILTER_NUMERIC,&_myValue),
wxTextCtrlNameStr);
处理函数void MyFrame::ValueChanged(wxCommandEvent& WXUNUSED(event))
{
// modify the string or do something clever
}
解决方案采用了由于这个回答,问题已经解决了。下面是我的选择:
wxFloatingPointValidator<double> _val(2,&_myValue,wxNUM_VAL_ZERO_AS_BLANK);
_val.SetRange(0.,100.); // set allowable range
_textBox1 = new wxTextCtrl(panel, // create a textCtrl
ID_textBox,
"0.0000",
wxPoint(100, 30),
wxSize(80,20),
wxTE_PROCESS_ENTER,
_val, // associate the text box with the desired validator
wxTextCtrlNameStr);
"
参见wxWidgets 2.9中可用的wxFloatingPointValidator
相关文章:
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 使用浮点数和双精度数的非常小数字的数学
- 使用设置精度时如何阻止数字向上舍入?
- 如何将数字输出到文件中,所有数字都具有相同的精度
- 如何在 c++ 中添加两个大的双精度数字
- 字符串和双精度的麻烦,等值后再得到一个数字
- 数字小于机器精度的安全算术?
- 避免双精度数字的四舍五入
- 有没有办法将数字作为字符串,并在不使用浮点数或双精度数的情况下将其四舍五入到确切的位数
- 将协议缓冲区中的二进制双精度数组转换为 JavaScript 数字
- 2 个给定数字之间的双精度密度
- 如何将精度设置为C 的100位数字
- 双精度数字程序意外值
- 非分数数字对双精度数字的影响
- C++ 浮点数与双精度数的精度数字
- 近似e-获得尽可能多的精度数字
- 将双精度数字四舍五入到十分之一位
- 为什么我的 64 位计算机不能在 C++ 中存储双精度数字 2^1024?
- c++中double的精确位数在windows和Linux中不同.为什么?Linux显示超过20个非零精度数字