你必须从字符串转换为double吗?如果是这样。如何?
是否有接受文本框字符串数据的trig函数?
有没有办法从文本框中将数据作为数字值而不是字符串?
答案 0 :(得分:3)
你必须从字符串转换为double吗?如果是这样。如何?
是。 There are quite a few ways to do this.
是否有接受文本框字符串数据的trig函数?
不,但是如果你真的想要一个,你可以使用上述问题中描述的技术之一轻松实现这样的功能。
通常您希望在使用之前验证用户输入以确保它是正确的,并且以数字形式验证输入比验证原始字符串容易得多。
有没有办法从文本框中将数据作为数字值而不是字符串?
也许;它完全取决于您使用的GUI框架。
答案 1 :(得分:2)
我建议使用strtod
char *str = ...;
const char *end;
double d = strtod(str, &end);
if (*end != '\0')
{
// questionable data
}
答案 2 :(得分:2)
你必须从字符串转换为双倍?
是
如果是的话。如何?
C ++方式是使用字符串流;特别是,你可能想要使用istringstream
。一种可行的替代方法是遵循C方式,即使用sscanf
和适当的格式说明符(“%f”)。
另一个C ++选项是使用提升lexical_cast
,但我认为开始仅针对lexical_cast
使用提升有点矫枉过正。
istringstream
的示例:
#include <sstream>
// ...
std::istringstream strParser(yourString);
double yourDouble;
strParser>>yourDouble;
if(strParser.fail())
{
// the string couldn't be converted to a double
}
else if(!strParser.eof())
{
// the string hasn't been fully consumed; this may or may not be a problem, depending on your needs
}
是否有接受文本框字符串数据的trig函数?
AFAIK不,不需要它们(尽管你可以很容易地写它们)。
有没有办法从文本框中将数据作为数字值而不是字符串?
WinAPI提供了一些用于对话框的“便利功能”,但我能记得的唯一提供此类帮助的是GetDlgItemInt
,顾名思义,它只适用于整数。
我现在看到你正在使用C ++ / CLI(你提到了System :: String):嗯,你应该说,这会改变选项。
在托管世界中,您最好的选择是使用Double::Parse
方法;要捕获格式错误的字符串,您应该在调用Double::Parse
之前捕获Double::TryParse
抛出的异常或调用Double::Parse
。
呃,我忘记了,因为你使用.NET Framework可能最好使用.NET三角函数(类System.Math
)。
答案 3 :(得分:1)
据我所知,没有办法从文本框直接转换为双倍。您需要先使用strtod转换为双精度。
您可以轻松地创建一个接受文本框控件作为参数的泛型函数,并返回一个double(假设它是文本框包含有效数字),请注意...