問題タブ [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.
python - C strtod に相当する Python
C++ プログラムの一部を Python に変換する作業を行っていますが、C 関数strtodを置き換えるのに問題があります。私が取り組んでいる文字列は、「KM/1000.0」などの単純な数学っぽい方程式で構成されています。問題は、定数と数値の両方が混在しているため、float() を使用できないことです。
strtod
変換された数値と次の文字の位置の両方を返すPython 関数をシミュレートするにはどうすればよいでしょうか?
c++ - Integer および Double データ型の入力検証
この質問を投稿したときにコードにエラーがあったため、良い質問ではありません。削除して、正しい解決策へのリンクに置き換えました。
c - 文字列をフロートに変換するには?
4.08000000
私は得たのに対し、出力は4.00000000
.
ドットの後に数字を取得する方法はありますか?
c - C文字列をdoubleに/から変換するときの奇妙な動作
doubleを印刷するとき、または文字列をdoubleに変換するときにどの精度を想定するかについて、Cの規則を理解するのに苦労しています。次のプログラムは私のポイントを説明する必要があります:
このプログラムをコンパイルして実行したときに得られる出力(gcc4.5.2のCore2 Duoで)は次のとおりです。
私の質問は次のとおりです。
- xがゼロ以外の数値として出力されるのはなぜですか?コンパイラが計算の目的でdoubleをより高精度の型にプロモートすることがあることは知っていますが、printfはxを64ビットのdoubleとして扱うべきではありませんか?
- Cライブラリが拡張精度の浮動小数点数を密かに使用している場合、これらの小さな数を変換しようとすると、strtodがerrnoを設定するのはなぜですか?そして、なぜそれはとにかく正しい結果を生み出すのですか?
- この動作は単なるバグであり、特定のハードウェアと開発環境の結果ですか?(残念ながら、現時点では他のプラットフォームでテストすることはできません。)
あなたが与えることができるどんな助けにも感謝します。フィードバックがありましたら、問題を明確にしようと思います。
c++ - strtod は間違った入力で errno を設定しません
g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
間違った入力でerrno
は 0 のままです。
EDITED:次はうまくいきます:
c++ - Valgrind: c_str および strtod での「無効な読み取り」
strtod() を使用していくつかの入力文字列を変換しています。valgrind でコードをチェックしているときに、「サイズ 8 の無効な読み取り」に遭遇しました。b が「i」または「n」で始まる場合、メッセージが表示されます。これは、これまでに発見したことです。また、const char* を (c_str() を呼び出さずに) 直接作成すると、strtod はうまくいくようです。コードは次のとおりです。
および (冗長な) valgrind 出力:
バグがありますか、それとも何か不足していますか?
c - char*をfloatまたはdoubleに変換する
ファイルから読み込んだ値があり、char*として保存されています。値は、通貨番号#。##、##。##、または###。##です。char *を計算に使用できる数値に変換したいのですが、atofとstrtodを試しましたが、ゴミの数値が表示されます。これを行う正しい方法は何ですか、そしてなぜ私がそれを間違っているのですか?
これは基本的に私が行っていることであり、char*値だけがファイルから読み込まれます。temp変数とftemp変数を出力すると、それらは単なるゴミであり、巨大な負の数です。
別の編集:
私はこれをgccで正確に実行しています
}
私の出力は価格です:3344336.000000、3344336.000000
編集:これが私のコードです
私の入力ファイルは非常に単純な名前で、次のような値のペアです。
値はドル額です
解決済み:ありがとうございます。%fの代わりに%dを使用していて、適切なヘッダーが含まれていませんでした。
c - strtod の定義と渡されたポインタの型
定義からdouble strtod ( const char * str, char ** endptr );
C リファレンス サイトは、その強力な機能の例を提供しています。
endptr
タイプが必要な場合は、char **
なぜchar *pEnd
ここで使用されますか? ではありませんchar **pEnd
か?
c - 文字列の長さが制限された strtod
次の文字を無視して、char 配列の最初の 3 文字を double として解析したい場合、本当にこれを行う必要がありますか?
strtod
数字を検索する文字列の最大長を指定できるような機能はありませんか?
編集:私はそれを印刷したい1.2
(現在はそうしています)、ではありません 1.23
!
c - 電流がすでに DBL_MAX*0.1 を超えているのに、なぜ strtod は数字を無視するのか
ソースコード (これがどのバージョンかはわかりません。ウェブサイトからの抜粋です)。for ループの最初の部分で、「十分な数字を取得しました。残りは無視します」というコメントがあります。
なぜこれが正しいのですか?そして、なぜこの「必ずしも結果がオーバーフローすることを意味するとは限らないのですか?」