小数桁数を指定して切り上げ・切り捨ての処理を行う方法
これは、InterSystems FAQ サイトの記事です。
小数点桁数を指定しない単純な整数への切り上げ・切り捨ては、それぞれ、以下の関数で実行できます。
(SQL関数)
(ObjectScript関数)
切り上げ: $system.SQL.Functions.CEILING()
切り捨て: $system.SQL.Functions.FLOOR()
USER>write $system.SQL.Functions.CEILING(168.5)
169
USER>write $system.SQL.Functions.FLOOR(168.5)
168
169
USER>write $system.SQL.Functions.FLOOR(168.5)
168
※バージョン2021.1以前は以下のメソッドを使用します。
切り上げ: $system.SQL.CEILING()
切り捨て: $system.SQL.FLOOR()
小数桁数を指定して切り上げ・切り捨てを行いたい場合は、2つの関数を組み合わせ、以下のようなメソッドを作成して対応します。
Class Sample.Utility Extends%RegisteredObject
{
ClassMethod Floor(val As%Numeric, scale As%Integer) As%Numeric [ Language = objectscript ]
{
Set multi=$select(scale>0:scale-1,1:scale)
Set tmpval=$system.SQL.Functions.FLOOR(val*(10**multi))
Quit tmpval*(10**-multi)
}
ClassMethod Ceiling(val As%Numeric, scale As%Integer) As%Numeric [ Language = objectscript ]
{
Set multi=$select(scale>0:scale-1,1:scale)
Set tmpval=$system.SQL.Functions.CEILING(val*(10**multi))
Quit tmpval*(10**-multi)
}
}
【実行例】
0.122 を小数点第3位で切り上げる
USER>write ##class(Sample.Utility).Ceiling(0.122,3)
.13
.13
0.122 を小数点第3位で切り捨てる
USER>write ##class(Sample.Utility).Floor(0.122,3)
.12
.12
ディスカッション (0)0