問題タブ [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.
c - C - strtod() が小数点を認識しない
カンマで区切られた「乱数」があるバッファがあります。例えば :
「1589.3,12478.359,485.39971」など
小数部分と整数部分の長さを確認する必要があります。
いくつかの調査を行い、1 つの数値を取得するために、バッファーで strtod() を使用することにしました。
ただし、意図したとおりには機能しません。だから私は簡単な例を試しました:
これは 3113 を出力するので、調査を行ったところ、整数ではないため %f を使用する必要があることがわかりました。
だから私はそれを修正しました:
そして、それは私に0.000000を出力します
通常の jeyboard のドット (.) とテンキーのドット (.) を使って、コンマ (,) で試してみました。それらはすべて私に同じ結果をもたらします。
私はdev c ++を使用しています(選択できません。ワークステーションの管理者ではありません)。
ご清聴ありがとうございました:)
c - csv から読み取ります。strtod は数字を含む文字列を読み取ることができません
次のファイルを読むと
私のコードは値列の読み取りに失敗します。私は使用しますstrtod
が、結果は次のとおりです。
Value は常に 0 です。この問題を解決するにはどうすればよいですか? ここにコード:
java - Java コンパイラの text-to-float 値の変換は strtod とは異なりますか?
Java 言語仕様ポイント 3.10.2は、浮動小数点値が IEEE 754 標準で指定されているとおりに変換されることを示しています。の場合strtod
、C 標準では、関数がテキストを float 値に変換する方法が指定されています。表現自体に関しては、両者は同じケースをカバーしているようです。よくわからないのは、丸めルールはどうですか?Java コンパイラは、何とは異なる変換をstrtod
行いますか?
背景は、Java バイトコード コードにコンパイルしたいため、クラス ファイルでの表現のために float/double 値のテキスト表現を変換する必要があるということです。
たとえば、次の Java コードはより正確な値を出力します。
strtod を使用して同じ値を変換して出力すると、正確ではない値が出力されます。
これは出力の問題ですか、それとも値が実際に別の方法で変換されているのでしょうか?
編集: Pascal Cuoqがコメントしたように、値を完全な精度で出力すると(私は設定でそうしましたstd::cout.precision()
)、値は等しいので、変換が同じ値につながると仮定します。そのためのテストを行うと思います。:-)
c++ - Visual Studio 2015、64 ビットでの std::strtod() の 10 進エラー
std::strod()
文字列を double に変換します。しかし、ある特定のケースでは、わずかな小数エラーがあります。このエラーは、 および にも表示されatof()
ますsscanf()
。このエラーは、次の条件がすべて満たされている場合にのみ発生します。
- Visual Studio 2015 (または VS 2015 update 1)
- 64 ビット (x64) 用にビルド
- を呼び出して
_controlfp_s()
「マイナス無限大への丸め」を設定します - 数値には小数部分があります (例: 0.5 または 2.5 (整数ではありません))。
(64 ビットの Windows 8.1 Enterprise でのみテストしました) 簡単な例を次に示します。
std::stod()
std::calling strtod()
stdlib.h
を呼び出しています。res1
正確に 0.5 にres2
なりますが、0.50000000000000011 になります
_controlfp_s(&tmp, RC_DOWN, MCW_RC);
丸め誤差を制御します。この場合、負の無限大に向かって丸めるように設定されています。_controlfp_s(&tmp, RC_NEAR, MCW_RC);
デフォルトに戻すとstrod()
、再び正確になり、res3
0.5になります。
一部の 10 進数は正確に表現できないことに注意してください。ただし、2.5、0.5、0.375 などの一部の数値は使用できますが、上記の例ではすべて丸め誤差が発生します。
変ですね。
何か間違っているのでしょうか、それとも Visual Studio の標準ライブラリのバグですか?
c - cで精度を失うことなく、char *をdoubleに変換します
助けが必要です。精度を失うことなく、char * を double または long doubleに変換して STORE する必要があります。
確かに、私はstrtoldおよびatofメソッド (またstrtold ) を使用しようとしましたが、これらのメソッドは値を丸めています。
例えば:
版画 : 39.751971
正しい値がprintf("%6.7f",ld)
得られますが、変数に格納できませんでした。
c - Cで文字列を解析して浮動小数点数にする
各行に 3 つの異なる (float) 値を含む .csv ファイルを開くプログラムを実行しています。異なる変数の異なる値を分離したい。そのために、私はすでに strtod() 関数を使用しましたが、Visual Studio でのみ機能し、DAVE IDE (Eclipse ベース) では機能しません。次のコードもテストしましたが、まったく成功しませんでした(多くのゴミが認識され、必要なものは何も認識されません)。
コードのコメント部分は、私が行った他のテストですが、どれも機能しません。f_read() を使用した理由は、このライブラリしか使用できないためです: http://elm-chan.org/fsw/ff/00index_e.html
「カット」文字列の例は次のとおりです。
11 番目の要素の後には何もありませんが、これは単なる例であり、.csv ファイルの一部の行にはさらに数字が含まれているため、これは重要ではありません (ただし、同じ 3 つの変数があります)。
前もって感謝します。
編集:問題は解決しました!DAVE IDE は、インクルードでヘッダーをインクルードすることを好まないようです。main.c の先頭に #include を書かなければなりませんでした。
c - C - strtod は数字を追加するようです
問題が発生しましたstrtod()
。数字が追加されているようです。私が読んでいる
ファイルからそして整数2
をスキップした後、次の出力が得られます
これが私のコードです