切捨て、切り上げ
COBOL
切り捨て:MOVE,COMPUTEなどの受け側のデータ項目の少数桁を1つ少なくしておけばは標準で切り捨てとなり意識する必要は有りません。
切り上げ:COBOLには切り上げ命令はありません。コーディングが必要です。基本的には少数点第一位を切り上げするとき0.9を加算し、整数データ項目に転記すればできます。
例)
01 A PIC S99.
01 B PIC S99V9.
COMPUTE A = B + 0.9
例2)しかし、例1では負数の切り上げを処理できません。COBOL的にはIF文を使わず一行でコーディングします。
負数のときは-0.9を加算する。
DATA DIVISION.
WORKING-STORAGE SECTION.
01 D PIC S9V9.
01 A PIC S9.
PROCEDURE DIVISION.
DISPLAY SPACES.
PERFORM VARYING D FROM -0.9 BY 0.1 UNTIL D > 0.9
COMPUTE A = D + (FUNCTION ABS(D) / D) * 0.9
DISPLAY "切り上げ(" D ")=" A
END-PERFORM
STOP RUN.
結果
| 切り上げ(09-)=1- 切り上げ(08-)=1- 切り上げ(07-)=1- 切り上げ(06-)=1- 切り上げ(05-)=1- 切り上げ(04-)=1- 切り上げ(03-)=1- 切り上げ(02-)=1- 切り上げ(01-)=1- 切り上げ(00+)=0+ 切り上げ(01+)=1+ 切り上げ(02+)=1+ 切り上げ(03+)=1+ 切り上げ(04+)=1+ 切り上げ(05+)=1+ 切り上げ(06+)=1+ 切り上げ(07+)=1+ 切り上げ(08+)=1+ 切り上げ(09+)=1+ |
VB.NET
切り上げ Math.Ceiling(A) 負数時のコーディングが必要
切り捨て Math.Floor(A) 同上
例)-0.9から+0.9までの数値の小数点以下一位を切り上げ・切り捨てし画面表示する。
’絶対値化しCeiling(Floor)を実行、+、-の符号を復元する。
Module Module1
Sub Main()
'.ToStringは文字列変換の関数
For f As Decimal = -0.9D To 0.9D Step 0.1D
Console.WriteLine("切り上げ(" + f.ToString + ")=" _
+ (Math.Sign(f) * Math.Ceiling(Math.Abs(f))).ToString)
Next
For f As Decimal = -0.9D To 0.9D Step 0.1D
Console.WriteLine("切り捨て(" + f.ToString + ")=" _
+ (Math.Sign(f) * Math.Floor(Math.Abs(f))).ToString)
Next
End Sub
End Module
結果
| 切り上げ(-0.9)=-1 切り上げ(-0.8)=-1 切り上げ(-0.7)=-1 切り上げ(-0.6)=-1 切り上げ(-0.5)=-1 切り上げ(-0.4)=-1 切り上げ(-0.3)=-1 切り上げ(-0.2)=-1 切り上げ(-0.1)=-1 切り上げ(0.0)=0 切り上げ(0.1)=1 切り上げ(0.2)=1 切り上げ(0.3)=1 切り上げ(0.4)=1 切り上げ(0.5)=1 切り上げ(0.6)=1 切り上げ(0.7)=1 切り上げ(0.8)=1 切り上げ(0.9)=1 |
| 切り捨て(-0.9)=0 切り捨て(-0.8)=0 切り捨て(-0.7)=0 切り捨て(-0.6)=0 切り捨て(-0.5)=0 切り捨て(-0.4)=0 切り捨て(-0.3)=0 切り捨て(-0.2)=0 切り捨て(-0.1)=0 切り捨て(0.0)=0 切り捨て(0.1)=0 切り捨て(0.2)=0 切り捨て(0.3)=0 切り捨て(0.4)=0 切り捨て(0.5)=0 切り捨て(0.6)=0 切り捨て(0.7)=0 切り捨て(0.8)=0 切り捨て(0.9)=0 |
お役に立てましたか?
IT、プログラミングのランキングサイトはこちらです。
最新記事の自動受信登録はこちらです。 |
![]() |
![]() |
![]() |
![]() |
| 固定リンク







コメント