問題タブ [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 投票する
1 に答える
550 参照

c - C - strtod() が小数点を認識しない

カンマで区切られた「乱数」があるバッファがあります。例えば ​​:

「1589.3,12478.359,485.39971」など

小数部分と整数部分の長さを確認する必要があります。

いくつかの調査を行い、1 つの数値を取得するために、バッファーで strtod() を使用することにしました。

ただし、意図したとおりには機能しません。だから私は簡単な例を試しました:

これは 3113 を出力するので、調査を行ったところ、整数ではないため %f を使用する必要があることがわかりました。

だから私はそれを修正しました:

そして、それは私に0.000000を出力します

通常の jeyboard のドット (.) とテンキーのドット (.) を使って、コンマ (,) で試してみました。それらはすべて私に同じ結果をもたらします。

私はdev c ++を使用しています(選択できません。ワークステーションの管理者ではありません)。

ご清聴ありがとうございました:)

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

c - csv から読み取ります。strtod は数字を含む文字列を読み取ることができません

次のファイルを読むと

私のコードは値列の読み取りに失敗します。私は使用しますstrtodが、結果は次のとおりです。

Value は常に 0 です。この問題を解決するにはどうすればよいですか? ここにコード:

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

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())、値は等しいので、変換が同じ値につながると仮定します。そのためのテストを行うと思います。:-)

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

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()、再び正確になり、res30.5になります。

一部の 10 進数は正確に表現できないことに注意してください。ただし、2.5、0.5、0.375 などの一部の数値は使用できますが、上記の例ではすべて丸め誤差が発生します。

変ですね。

何か間違っているのでしょうか、それとも Visual Studio の標準ライブラリのバグですか?

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

c - cで精度を失うことなく、char *をdoubleに変換します

助けが必要です。精度を失うことなく、char * を double または long doubleに変換して STORE する必要があります。

確かに、私はstrtoldおよびatofメソッド (またstrtold ) を使用しようとしましたが、これらのメソッドは値を丸めています。

例えば:

版画 : 39.751971

正しい値がprintf("%6.7f",ld)得られますが、変数に格納できませんでした。

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

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 を書かなければなりませんでした。

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

c - C - strtod は数字を追加するようです

問題が発生しましたstrtod()。数字が追加されているようです。私が読んでいる

ファイルからそして整数2をスキップした後、次の出力が得られます

これが私のコードです