1

你必须从字符串转换为双精度吗?如果是这样的话。如何?

是否有用于按原样接受文本框字符串数据的 trig 函数?

有没有办法将文本框中的数据作为数值而不是字符串提取?

4

4 回答 4

3

你必须从字符串转换为双精度吗?如果是这样的话。如何?

是的。 有很多方法可以做到这一点。

是否有用于按原样接受文本框字符串数据的 trig 函数?

不,但如果您真的想要一个,您可以使用上述问题中描述的技术之一轻松实现这样的功能。

通常,您希望在使用之前验证用户输入以确保它是正确的,并且以数字形式验证输入比验证原始字符串要容易得多。

有没有办法将文本框中的数据作为数值而不是字符串提取?

也许; 这完全取决于您使用的 GUI 框架。

于 2010-06-02T22:33:35.383 回答
2

我建议使用strtod

char *str = ...;
const char *end;
double d = strtod(str, &end);
if (*end != '\0')
{
    // questionable data
}
于 2010-06-02T22:32:35.887 回答
2
你必须从字符串转换为双精度吗?

是的。

如果是这样的话。如何?

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)可能会更好。

于 2010-06-02T22:35:54.753 回答
1

据我所知,没有办法从文本框直接转换为双倍。您需要先使用strtod 之类的东西转换为双精度。

您可以轻松地创建一个通用函数,它接受一个文本框控件作为参数并返回一个双精度值(假设它的文本框包含一个有效数字)请注意..

于 2010-06-02T22:36:21.713 回答