問題タブ [strtod]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
1059 参照

python - C strtod に相当する Python

C++ プログラムの一部を Python に変換する作業を行っていますが、C 関数strtodを置き換えるのに問題があります。私が取り組んでいる文字列は、「KM/1000.0」などの単純な数学っぽい方程式で構成されています。問題は、定数と数値の両方が混在しているため、float() を使用できないことです。

strtod変換された数値と次の文字の位置の両方を返すPython 関数をシミュレートするにはどうすればよいでしょうか?

0 投票する
2 に答える
726 参照

c++ - Integer および Double データ型の入力検証

この質問を投稿したときにコードにエラーがあったため、良い質問ではありません。削除して、正しい解決策へのリンクに置き換えました。

入力検証の正しい解

0 投票する
8 に答える
219962 参照

c - 文字列をフロートに変換するには?

4.08000000私は得たのに対し、出力は4.00000000.

ドットの後に数字を取得する方法はありますか?

0 投票する
2 に答える
431 参照

c - C文字列をdoubleに/から変換するときの奇妙な動作

doubleを印刷するとき、または文字列をdoubleに変換するときにどの精度を想定するかについて、Cの規則を理解するのに苦労しています。次のプログラムは私のポイントを説明する必要があります:

このプログラムをコンパイルして実行したときに得られる出力(gcc4.5.2のCore2 Duoで)は次のとおりです。

私の質問は次のとおりです。

  1. xがゼロ以外の数値として出力されるのはなぜですか?コンパイラが計算の目的でdoubleをより高精度の型にプロモートすることがあることは知っていますが、printfはxを64ビットのdoubleとして扱うべきではありませんか?
  2. Cライブラリが拡張精度の浮動小数点数を密かに使用している場合、これらの小さな数を変換しようとすると、strtodがerrnoを設定するのはなぜですか?そして、なぜそれはとにかく正しい結果を生み出すのですか?
  3. この動作は単なるバグであり、特定のハードウェアと開発環境の結果ですか?(残念ながら、現時点では他のプラットフォームでテストすることはできません。)

あなたが与えることができるどんな助けにも感謝します。フィードバックがありましたら、問題を明確にしようと思います。

0 投票する
2 に答える
1427 参照

c++ - strtod は間違った入力で errno を設定しません

g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1

間違った入力でerrnoは 0 のままです。

EDITED:次はうまくいきます:

0 投票する
1 に答える
2028 参照

c++ - Valgrind: c_str および strtod での「無効な読み取り」

strtod() を使用していくつかの入力文字列を変換しています。valgrind でコードをチェックしているときに、「サイズ 8 の無効な読み取り」に遭遇しました。b が「i」または「n」で始まる場合、メッセージが表示されます。これは、これまでに発見したことです。また、const char* を (c_str() を呼び出さずに) 直接作成すると、strtod はうまくいくようです。コードは次のとおりです。

および (冗長な) valgrind 出力:

バグがありますか、それとも何か不足していますか?

0 投票する
3 に答える
131273 参照

c - char*をfloatまたはdoubleに変換する

ファイルから読み込んだ値があり、char*として保存されています。値は、通貨番号#。##、##。##、または###。##です。char *を計算に使用できる数値に変換したいのですが、atofとstrtodを試しましたが、ゴミの数値が表示されます。これを行う正しい方法は何ですか、そしてなぜ私がそれを間違っているのですか?

これは基本的に私が行っていることであり、char*値だけがファイルから読み込まれます。temp変数とftemp変数を出力すると、それらは単なるゴミであり、巨大な負の数です。

別の編集:

私はこれをgccで正確に実行しています

}

私の出力は価格です:3344336.000000、3344336.000000

編集:これが私のコードです

私の入力ファイルは非常に単純な名前で、次のような値のペアです。

値はドル額です

解決済み:ありがとうございます。%fの代わりに%dを使用していて、適切なヘッダーが含まれていませんでした。

0 投票する
2 に答える
256 参照

c - strtod の定義と渡されたポインタの型

定義からdouble strtod ( const char * str, char ** endptr );

C リファレンス サイトは、その強力な機能の例を提供しています。

endptrタイプが必要な場合は、char **なぜchar *pEndここで使用されますか? ではありませんchar **pEndか?

0 投票する
4 に答える
1893 参照

c - 文字列の長さが制限された strtod

次の文字を無視して、char 配列の最初の 3 文字を double として解析したい場合、本当にこれを行う必要がありますか?

strtod数字を検索する文字列の最大長を指定できるような機能はありませんか?

編集:私はそれを印刷したい1.2(現在はそうしています)、ではありません 1.23

0 投票する
1 に答える
297 参照

c - 電流がすでに DBL_MAX*0.1 を超えているのに、なぜ strtod は数字を無視するのか

ソースコード (これがどのバージョンかはわかりません。ウェブサイトからの抜粋です)。for ループの最初の部分で、「十分な数字を取得しました。残りは無視します」というコメントがあります。

なぜこれが正しいのですか?そして、なぜこの「必ずしも結果がオーバーフローすることを意味するとは限らないのですか?」