你必须从字符串转换为双精度吗?如果是这样的话。如何?
是否有用于按原样接受文本框字符串数据的 trig 函数?
有没有办法将文本框中的数据作为数值而不是字符串提取?
你必须从字符串转换为双精度吗?如果是这样的话。如何?
是的。 有很多方法可以做到这一点。
是否有用于按原样接受文本框字符串数据的 trig 函数?
不,但如果您真的想要一个,您可以使用上述问题中描述的技术之一轻松实现这样的功能。
通常,您希望在使用之前验证用户输入以确保它是正确的,并且以数字形式验证输入比验证原始字符串要容易得多。
有没有办法将文本框中的数据作为数值而不是字符串提取?
也许; 这完全取决于您使用的 GUI 框架。
我建议使用strtod
char *str = ...;
const char *end;
double d = strtod(str, &end);
if (*end != '\0')
{
// questionable data
}
你必须从字符串转换为双精度吗?
是的。
如果是这样的话。如何?
C++方式是使用字符串流;特别是,您可能想要使用istringstream
. 一个可行的替代方法是遵循 C 方式,即sscanf
与适当的格式说明符 ("%f") 一起使用。
另一个 C++ 选项是使用 boost lexical_cast
,但在我看来,仅仅为了开始使用 boostlexical_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
)可能会更好。
据我所知,没有办法从文本框直接转换为双倍。您需要先使用strtod 之类的东西转换为双精度。
您可以轻松地创建一个通用函数,它接受一个文本框控件作为参数并返回一个双精度值(假设它的文本框包含一个有效数字)请注意..