将一个来自Glib :: ustring的字符串转换为double - gtkm 2

时间:2014-06-10 11:36:18

标签: c++ casting glib gtkmm

我正在开发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()

2 个答案:

答案 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;一个地区。