問題タブ [rounding]

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 投票する
10 に答える
35822 参照

java - Javaで通貨値を切り上げるにはどうすればよいですか?

さて、これが私の問題です。基本的に私はこの問題を抱えています。

.53999999 のような番号があります。数学関数を使用せずに 54 に切り上げるにはどうすればよいですか?

スケーリングするには100を掛けてから割る必要があると思いますか?そんな感じ?


問題はお金です。$50.5399999 を持っているとしましょう。$50 を手に入れる方法は知っていますが、セントを手に入れる方法はわかりません。.539999 の部分を取得できますが、54 セントにする方法がわかりません。

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

c++ - C ++のRound()はどこにありますか?

複製:C ++のfloatのround()


VS2008を使用していて、math.hを含めましたが、それでもラウンド関数が見つかりません。それは存在しますか?

私はグーグルでたくさんの「0.5を追加してintにキャストする」ソリューションを見ています。それがベストプラクティスですか?

0 投票する
7 に答える
9074 参照

objective-c - NSTimeInterval から読み取り可能な NSNumber

NSTimeInterval == ダブル; (例: 169.12345666663)

「ドット」の後に2桁しか残らないように、この倍精度を切り上げるにはどうすればよいですか?
結果が NSNumber であれば非常に良いでしょう。

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

floating-point - 浮動小数点範囲を整数範囲に変換/定量化する

[0、1]の範囲の浮動小数点数があり、それを量子化して符号なしバイトに格納したいとします。当たり前のように聞こえますが、実際には非常に複雑です。

明らかな解決策は次のようになります。

これは、0から255までのすべての数値を取得するまでは機能しますが、整数の分布は均一ではありません。この関数は255、aが正確にである場合にのみ戻ります1.0f。良い解決策ではありません。

適切な丸めを行うと、問題がシフトします。

ここでは、結果0は他のどの数値よりもフロート範囲の半分しかカバーしていません。

浮動小数点範囲を均等に分散して量子化するにはどうすればよいですか?理想的には、均等に分散されたランダムフロートを量子化する場合、整数の均等な分布を取得したいと思います。

何か案は?


ところで:また、私のコードはCにあり、問題は言語に依存しません。C以外の人の場合:変換することでフロートが切り捨てられると仮定しfloatます。int

編集:ここで混乱があったので:最小の入力float(0)を最小のunsigned charにマップし、範囲の最大のfloat(1.0f)を最大のunsignedバイト(255)にマップするマッピングが必要です。

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

c# - double を最も近い整数値に変換するにはどうすればよいですか?

double を最も近い int に変換するにはどうすればよいですか?

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

java - Java BigDecimal を最も近い間隔に丸める

最も近い指定された間隔 (この場合は金融市場のティック サイズ) に丸める必要がある BigDecimal 計算結果があります。

例: 価格 [ティック サイズ] -> 四捨五入された価格

ありがとう。

更新: Java/BigDecimal 用語に翻訳された schnaader のソリューション:

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

c++ - 偏りのある浮動小数点の丸め (常に切り上げまたは切り下げ) を行うにはどうすればよいですか?

フロートを常に下または常に上にバイアスして丸めたい。これが必要なコード内の特定のポイントがあり、プログラムの残りの部分は通常どおり最も近い値に丸められる必要があります。

たとえば、最も近い 1/10 の倍数に丸めたいとします。7/10 に最も近い浮動小数点数は約 0.69999998807 ですが、8/10 に最も近い数値は約 0.80000001192 です。数値を四捨五入すると、次の 2 つの結果が得られます。同じように丸めたほうがいいです。7/10 は 0.70000004768 に丸め、8/10 は 0.80000001192 に丸める必要があります。

この例では、常に切り上げていますが、常に切り捨てたい場所がいくつかあります。幸いなことに、私はこれらの各場所で正の値のみを扱っています。

丸めに使用している行は ですfloor(val * 100 + 0.5) / 100。私はC++でプログラミングしています。

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

.net - .NETでdouble値を選択した小数点以下の桁数に丸める方法は?

加速度センサーを使用して現在の加速度を計算すると、double値が返されます。

ただし、現在の加速度を値9.8と比較したいと思います。その前に、センサーから受け取った値を丸める必要があるので、質問は次のとおりです。.NETでdouble値を選択した小数点以下の桁数に丸める方法は?

0 投票する
7 に答える
746 参照

c# - C# で複数の double を追加すると、順序が丸めに影響するのはなぜですか?

次の C# コードを検討してください。

result1 は常に result2 と等しくなければなりませんよね?問題は、そうではないということです。result1 は 3.3 で、result2 は 3.3000000000000003 です。唯一の違いは、定数の順序です。

double は、丸めの問題が発生する可能性がある方法で実装されていることを知っています。絶対精度が必要な場合は、代わりに小数を使用できることを認識しています。または、if ステートメントで Math.Round() を使用できること。私は、C# コンパイラが何をしているかを理解したい単なるオタクです。誰でも教えてもらえますか?

編集:

これまでに浮動小数点演算について読むことを提案したり、CPU が double を処理する方法に固有の不正確さについて話したりしたすべての人に感謝します。しかし、私の質問の要点はまだ答えられていないと感じています。それを正しく表現していないのは私のせいです。次のように言いましょう。

上記のコードを分解すると、次の操作が行われると予想されます。

上記の加算のそれぞれに丸め誤差 (番号 e1..e4) があると仮定しましょう。したがって、r1 には丸め誤差 e1 が含まれ、r2 には丸め誤差 e1 + e2 が含まれ、r3 には e3 が含まれ、r4 には e3 + e4 が含まれます。

さて、丸め誤差がどのように発生するのか正確にはわかりませんが、e1 + e2 が e3 + e4 に等しいと予想していました。明らかにそうではありませんが、それは私にはどういうわけか間違っているようです。もう 1 つのことは、上記のコードを実行すると、丸めエラーが発生しないことです。それが、CPU ではなく、C# コンパイラが奇妙なことをしていると私に思わせる理由です。

私は多くのことを尋ねていることを知っています。おそらく、誰もが与えることができる最良の答えは、CPU 設計で PHD を実行することですが、私は尋ねたいと思いました。

編集 2

元のコード サンプルの IL を見ると、これを行っているのは CPU ではなくコンパイラであることは明らかです。

コンパイラは私のために数字を合計しています!

0 投票する
6 に答える
40741 参照

sql - SQL Server が 2 つの整数を除算した結果を四捨五入するのはなぜですか?

パーセンテージを整数 (つまり、50、75、85 など) として含む smallint 列を持つテーブルがあります。

この列を 100 で割ると、次のようになります。

結果は最も近い整数に丸められます。たとえば、数値「50」を含む行の場合、結果としてゼロが得られます。

簡単なステートメントでこれを複製できます。

それはなぜですか? また、結果の精度を高めるにはどうすればよいですか?