| 2017/05/15(Mon) 19:50:38 編集(投稿者)
■No84093 (AI さん) に返信 > 4. JisRound(12.25 , 3) → 12.2 > となってしまいます。
これは想定どおりの動作です。
当初の質問の仕様が曖昧になってしまっていますので、 まずは「正しい仕様」を厳密に定めておくのが先決かと思います。
繰り返しの質問になりますが、まずは仕様をハッキリさせましょう。 No84065 で AI さんが書かれた ★JIS丸め★ とは、 下記のいずれの動作を想定しているのでしょうか?
>>> 有効数字3桁まででJIS丸め(有効数字4桁目をJIS丸め)をしたい
(1) JIS Z 8401:1999 の規則 A(偶数丸めとか銀行丸めとか五捨五入と呼ばれる動作) (2) JIS Z 8401:1999 の規則 B(いわゆる四捨五入) (3) 上記以外
なお、JIS 丸めについて知りたい場合は、下記の【JIS検索】で、 "Z8401" を検索してみて確認してみてください。数ページの PDF です。
https://www.jisc.go.jp/app/jis/general/GnrJISSearch.html
具体例を挙げると、規則 A と B では下記のような違いがあります。 規則A では、1.5 や 2.5 は 「2」に丸められます。-1.5 や -2.5 は「-2」です。 規則B では、1.5 は「2」に、2.5 は「3」に丸められます。-1.5 は「-2」、-2.5 は「-3」です。
規則 A では、中間値は偶数方向に丸められます。だから ToEven。
規則 B では、正の中間値は切り上げされますが、負の中間値は切り捨てです。 ゼロを基準に正負で対称的になっています。だから AwayFromZero。
このほか、正数で負数とで対象性が無い方が望ましい場合もあるでしょう。 たとえば摂氏温度や華氏温度などでは、ゼロを基準として丸め方が変わると困るので、 正負によらず中間値が常に切り上げとなるような四捨五入として、 -1.5 は「-1」、-2.5 は「-2」へと丸めたいこともあります。
しかし、JIS 規格の『数値の丸め方』では、そのようなパターンは定められていません。
[JIS Z 8401 : 1999] より引用 》 この規格では対象となる数値として正の数値しか想定していない。 》 負の数値を対象とする場合は、その絶対値に適用しなければならない。
> 3. JisRound(12.251 , 3) → 12.3 ※No84084の値で確認 > 4. JisRound(12.25 , 3) → 12.2 > 3と4で両方の結果が異なる理由がよく分かりません。
今回は、Decimal 型の精度(有効桁数 28.8 桁)での処理ですよね。
12.251 は、規則 A でも B でも「12.3」になります。 12.250 は、規則 A では「12.2」、規則 B では「12.3」です。
有効桁数 3 桁で丸めたときに「12.3」になる十進小数の範囲:
【規則 A (ToEven) の場合】 12.250000000000000000000000001D 以上 12.349999999999999999999999999D 以下
【規則 B (AwayFromZero) の場合】 12.250000000000000000000000000D 以上 12.349999999999999999999999999D 以下
有効桁数 3 桁で丸めたときに「12.2」になる十進小数の範囲:
【規則 A (ToEven) の場合】 12.150000000000000000000000000D 以上 12.250000000000000000000000000D 以下
【規則 B (AwayFromZero) の場合】 12.150000000000000000000000000D 以上 12.249999999999999999999999999D 以下 |