将Glib :: ustring转换为double类型 - gtkm 2

3

我正在使用gtkmm 2开发一个c++应用程序。

我遇到了将entryfield中的字符串转换为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();

以及事件处理程序

 void HelloWorld::on_button_clicked(Glib::ustring data)
 {
  std::cout << "interestrate: " << interestrate.get_text() << std::endl; 
 }

所以我想要从返回值中得到一个双倍。

 interestrate.get_text()

https://dev59.com/JHLYa4cB1Zd3GeqPY4mI这是一个关于将字符串转换为双精度浮点数的C++编程问题。在这个问题中,许多程序员提供了他们自己的解决方案和代码示例,以帮助其他人解决类似的问题。如果您正在寻找一种将字符串转换为双精度浮点数的方法,那么这个问题可能会对您有所帮助。 - CodeClown42
2个回答

1

如果您想处理不良数字格式和区域设置问题,您需要做更多的工作;atof在出错时返回0,但是0可能是有效的输入,在德国,用户可能会将逗号作为小数点。

我认为(从阅读glib文档和这个答案:如何在C++中将字符串转换为双精度浮点数?),您应该首先通过Glib::locale_from_utf8()获取正确的本地化std :: string,然后从中创建一个stringstream,并从中读取double。流提供错误信息,而转换/操作符>>()将处理区域设置问题,如果您已经“灌输”了区域设置。

您的建议对于有效的C语言环境输入有效。


1

我不相信它可以如此简单

 std::string s = interestrate.get_text();
 double d = atof(s.c_str());

你可以在这里避免一些间接操作:get_text() 返回一个 Glib::ustring,它有一个 .data() 方法来获取 C 字符串。 - underscore_d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接