我正在开发gtkmm 2中的c ++应用程序
我有一个问题是将字符串从一个入口字段转换为double(或int)。
我收到以下编译错误
cannot convert from Glib::ustring to double
输入字段
interestrate.set_max_length(50);
interestrate.set_text(interestrate.get_text() );
interestrate.select_region(0, interestrate.get_text_length());
m_box1.pack_start(interestrate);
interestrate.show();
按钮
m_button3.signal_clicked().connect(sigc::bind<-1, Glib::ustring>(
sigc::mem_fun(*this, &HelloWorld::on_button_clicked), "OK"));
m_box1.pack_start(m_button3);
m_button3.show();
和eventhandler
void HelloWorld::on_button_clicked(Glib::ustring data)
{
std::cout << "interestrate: " << interestrate.get_text() << std::endl;
}
所以我想从
获得两倍的returnvalue interestrate.get_text()
答案 0 :(得分:1)
我不相信它会这么容易
std::string s = interestrate.get_text();
double d = atof(s.c_str());
答案 1 :(得分:1)
您的建议适用于有效的C语言环境输入。
如果您想处理错误的数字格式和区域设置注意事项,您必须多做一点; atof在出错时返回0,但0可能是有效输入,在德国,用户可能会输入逗号作为小数点。
我认为(从阅读glib文档和这个答案:How can I convert string to double in C++?),您应该首先通过Glib :: locale_from_utf8()获取正确的本地化std :: string,然后从中创建一个字符串流读你的双倍。该流为您提供错误信息,转换/运算符&gt;&gt;()将处理区域设置问题,如果您有&#34; imbued&#34;一个地区。