C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■84097 / 12階層)  有効桁数3桁まででJIS丸めがしたい
□投稿者/ 魔界の仮面弁士 (1278回)-(2017/05/15(Mon) 19:44:15)
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 以下
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[11]: 有効桁数3桁まででJIS丸めがしたい /AI →Re[13]: 有効桁数3桁まででJIS丸めがしたい /魔界の仮面弁士
 
上記関連ツリー

有効桁数3桁まででJIS丸めがしたい / AI (17/05/12(Fri) 14:53) #84065
Re[1]: 有効桁数3桁まででJIS丸めがしたい / Jitta (17/05/12(Fri) 15:18) #84066
│└ Re[2]: 有効桁数3桁まででJIS丸めがしたい / AI (17/05/12(Fri) 15:35) #84067
Re[1]: 有効桁数3桁まででJIS丸めがしたい / 魔界の仮面弁士 (17/05/12(Fri) 16:29) #84069
    └ Re[3]: 有効桁数3桁まででJIS丸めがしたい / hihijiji (17/05/12(Fri) 16:17) #84068
      └ Re[4]: 有効桁数3桁まででJIS丸めがしたい / AI (17/05/12(Fri) 17:24) #84071
        └ Re[5]: 有効桁数3桁まででJIS丸めがしたい / hihijiji (17/05/12(Fri) 18:17) #84075
          └ Re[6]: 有効桁数3桁まででJIS丸めがしたい / AI (17/05/12(Fri) 19:08) #84077
            └ Re[7]: 有効桁数3桁まででJIS丸めがしたい / hihijiji (17/05/13(Sat) 10:31) #84079
              └ Re[8]: 有効桁数3桁まででJIS丸めがしたい / 魔界の仮面弁士 (17/05/13(Sat) 11:14) #84080
                └ Re[9]: 有効桁数3桁まででJIS丸めがしたい / hihijiji (17/05/13(Sat) 11:40) #84081
                  └ Re[10]: 有効桁数3桁まででJIS丸めがしたい / 魔界の仮面弁士 (17/05/13(Sat) 22:04) #84084
                    └ Re[11]: 有効桁数3桁まででJIS丸めがしたい / AI (17/05/15(Mon) 18:03) #84093
                      ├ Re[12]: 有効桁数3桁まででJIS丸めがしたい / furu (17/05/15(Mon) 18:25) #84094
                      │└ Re[13]: 有効桁数3桁まででJIS丸めがしたい / AI (17/05/16(Tue) 14:39) #84114
                      └ 有効桁数3桁まででJIS丸めがしたい / 魔界の仮面弁士 (17/05/15(Mon) 19:44) #84097 ←Now
                        └ Re[13]: 有効桁数3桁まででJIS丸めがしたい / 魔界の仮面弁士 (17/05/16(Tue) 09:37) #84101
                          └ Re[14]: 有効桁数3桁まででJIS丸めがしたい / AI (17/05/16(Tue) 14:41) #84115 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信