1

文字列から double に変換する必要がありますか? もしそうなら。どうやって?

テキストボックスの文字列データをそのまま受け入れるトリガーの関数はありますか?

テキストボックスからデータを文字列ではなく数値として取得する方法はありますか?

4

4 に答える 4

3

文字列から double に変換する必要がありますか? もしそうなら。どうやって?

はい。 これを行うにはかなりの数の方法があります。

テキストボックスの文字列データをそのまま受け入れるトリガーの関数はありますか?

いいえ、しかし本当に必要な場合は、前述の質問で説明されている手法のいずれかを使用して、そのような関数を簡単に実装できます。

通常、ユーザー入力を使用する前にそれが正しいことを検証する必要があります。数値形式の入力の検証は、生の文字列の検証よりもはるかに簡単です。

テキストボックスからデータを文字列ではなく数値として取得する方法はありますか?

多分; 使用している 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
文字列から double に変換する必要がありますか?

はい。

もしそうなら。どうやって?

C++ の方法は、文字列ストリームを使用することです。特に、おそらく を使用したいと思うでしょうistringstream。実行可能な代替手段は、C の方法に従うことです。つまりsscanf、適切な書式指定子 ("%f") を使用します。

別の C++ オプションは boost を使用することですが、私の意見では、lexical_cast単に boost を使い始めるの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
}
テキストボックスの文字列データをそのまま受け入れるトリガーの関数はありますか?

私の知る限り、それらは必要ありません (ただし、非常に簡単に記述できます)。

テキストボックスからデータを文字列ではなく数値として取得する方法はありますか?

WinAPI は、ダイアログで使用するためのそのような「便利な関数」をいくつか提供しますが、そのようなヘルプを提供する唯一のものを思い出すことができますGetDlgItemInt。これは、名前が示すように、整数に対してのみ機能します。

補遺

C++/CLI を使用していることがわかりました (System::String について言及しました): まあ、そう言うべきでした。これにより、オプションがかなり変更されます。

Double::Parse管理された世界では、メソッドを使用するのが最善の選択肢です。不正な形式の文字列をキャッチするには、 によってスローされた例外をキャッチするか、 をDouble::Parse呼び出すDouble::TryParse前に を呼び出す必要がありDouble::Parseます。

補遺 bis

忘れていましたが、.NET Framework を使用しているので、おそらく .NET の三角関数 (クラスSystem.Math) を使用する方がよいでしょう。

于 2010-06-02T22:35:54.753 に答える
1

私の知る限り、テキストボックスからダブルへの直接変換を行う方法はありません。最初にstrtodのようなもので double に変換する必要があります。

テキストボックスコントロールを引数として受け入れ、ダブルを返す汎用関数を簡単に作成できます(テキストボックスに有効な数値が含まれていると仮定します)。

于 2010-06-02T22:36:21.713 に答える