問題タブ [bankers-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.
sql - Float データ型はバンカーの丸めでは機能しません -- SQL Server 2008
背景を説明するために、私は現在、Access データベースとそのコードを SQL に移行するプロジェクトに取り組んでいます。
その過程で、Access のデータ型を SQL Server の に変更Double
しFloat
ました。これを行ったのは、これらのデータ型が密接に関連していることと、私のデータベースが多くの除算と乗算を実行しているためです (浮動小数点数が最適であると聞いたことがあります)。
データベースの変換に関するもう 1 つの問題は、Access がバンカーの丸めを使用するのに対し、SQL は使用しないという事実で発生しました。外に出て、2 つの UD バンカーの丸め関数を見つけました。両方とも、一貫したバンカーの丸め結果が得られません。
この不一致は、これらのバンカーの丸め関数 (減算と加算を含む) を浮動小数点数で実行しようとするときに予想されるものですか?
次の2つの機能があります...
java - BigDecimal と計算に関する Java の丸め問題
数値で構成されるデータセットがありBigDecimal
ます。レポートで紹介したいと思います。次の形式でレポートを生成することができました。これは、会計における試算表に似ています。そうではありません!表のデータには、値の小数点以下 4 桁があります。ただし、レポートでは、小数点以下 2 桁に丸める必要があります。レポートも正確でなければならないため、BigDecimal
.
本当の問題は、合計を表示するときです。四捨五入すると、合計が正しく加算されません。
HALF_EVEN
簿記に使用されるため、また、このケースには財務も含まれるため、丸めモードを使用しています。
値を四捨五入した後、合計できます。レポートの計算は問題ありません。しかし、それはデータベースにある実際の値を表していません (.553 は .55 に近いですが、四捨五入後に合計すると .56 になり、.553 は .56 に近くありません)。
とにかくこの問題を克服する方法はありますか? 試算表の作成方法を調べたのですが、適切な解決策が見つかりませんでしたか?
編集1
このような金融システムで試算表レポートを見たことがありますが、四捨五入後に計算を行うのですか? このレポートは 1 つのレポートに似ているため、これを試算表レポートと比較し続けます。
EDIT 2
丸められた値で計算してもよろしいですか? 元の値が破棄されるため、丸められた値で計算を行うことはお勧めできません。
EDIT 3 @ MarcioB、@ user3679868、および @ JoopEggen に基づいて、丸められた値に基づいて計算を行うことにしました。差 .047 (.56 - .553) は明らかに償却されます (監査基準)!
arm - ARM NEONはf32をs32に変換し、偶数に丸めます
vcvt_s32_f32 組み込みの丸めモードを制御する関数はありますか? 負の無限大に向かって丸めるのではなく、偶数に向かって丸めたいです。
ありがとう。
c++ - IEEE-754 準拠の 2 分の 1 から偶数への丸め
C 標準ライブラリは、C99 のround
、lround
、およびllround
関数ファミリを提供します。ただし、これらの関数は IEEE-754 に準拠していません。これは、IEEE で義務付けられている 2 分の 1 から偶数への「バンカーの丸め」を実装していないためです。半端から偶数への丸めでは、小数部分が正確に 0.5 の場合、結果を最も近い偶数値に丸める必要があります。cppreference.comに記載されているように、代わりに C99 標準ではゼロから半分離れていることが義務付けられています。
1-3) arg に最も近い整数値 (浮動小数点形式) を計算し、現在の丸めモードに関係なく、ゼロから離れて途中で丸めます。
C で丸めを実装する通常のアドホックな方法は、厳密な IEEE-754 数学では正しくない(int)(x + 0.5f)
にもかかわらず、通常はコンパイラによって正しい命令に変換される式です。ただし、これは移植可能な仮定ではありません。cvtss2si
半分から偶数のセマンティクスで浮動小数点値を丸める関数を実装するにはどうすればよいですか? 可能であれば、関数は非 IEEE 浮動小数点型で動作できるように、言語と標準ライブラリのセマンティックのみに依存する必要があります。これが不可能な場合は、IEEE-754 ビット表現で定義された回答も受け入れられます。<limits.h>
またはの観点から定数を特徴付けてください<limits>
。
c# - Math.Round(1.225,2) は 1.23 を返しますが、1.22 を与えるべきではありません
AFAIK .NETのデフォルトのラウンドオプションは偶数であるため、 1.22Math.Round(1.225,2)
を指定する必要がありますが、1.23を指定します。
私が試したすべての値は最も近い偶数に丸められますが、 1.225 と -1.225 だけが1.23と-1.23に丸められます。
sql - Oracle でのバンカーの丸め
バンカーの丸めをサポートするための Oracle の内部関数はありますか?