数値関数
数値関数は数値を丸め、数値をテストします。丸め関数は、1セント未満の差分で会計合計が異なる場合など、システム間の精度の不一致を防ぐのに役立ちます。
金額はFLOATではなくDECIMALとして丸める
round_placesおよびround_significantは、FloatではなくDecimalを受け取ります。これは、Floatでは0.1を正確に表現できないため、丸めが始まる前にすでに精度が失われているからです。
Decimal('12.50')などを使用して、境界で通貨金額をDecimalに変換し、変換全体を通してDecimal値として保持します。 Transform Dataアクションのスキーマ推論では、この変換は実行されません。
機能の提供状況
WELは現在、一部のお客様にご利用いただけます。ご利用のワークスペースで利用可能かどうかを確認するには、Customer Success Representativeにお問い合わせください。
整数に丸める
次の関数は、数値を最も近い整数、次の整数、または前の整数に丸めます。
round
最も近い整数に丸めます。
round(number)| パラメーター | 説明 |
|---|---|
| number | 丸める数値。 |
中間点で切り上げる
次の例では、中間点で数値を切り上げます。
Formula
round(3.5)出力
4中間点未満で切り下げる
次の例では、中間点未満の場合に数値を切り下げます。
Formula
round(2.4)出力
2ceil
次の整数に切り上げます。
ceil(number)| パラメーター | 説明 |
|---|---|
| number | 切り上げる数値。 |
小数に関係なく切り上げる
次の例では、小数に関係なく数値を切り上げます。
Formula
ceil(3.2)出力
4floor
前の整数に切り下げます。
floor(number)| パラメーター | 説明 |
|---|---|
| number | 切り下げる数値。 |
小数に関係なく切り下げる
次の例では、小数に関係なく数値を切り下げます。
Formula
floor(3.9)出力
3精度に丸める
次の関数は、Decimalを固定の小数点以下の桁数または有効桁数に丸めます。
round_places
Decimalを指定された小数点以下の桁数に丸めます。
round_places(decimal, places, options)| パラメーター | 説明 |
|---|---|
| decimal | 丸めるDecimal。 |
| places | 保持する小数点以下の桁数。 |
| options | 丸めモードを制御するオプションのマップ。
|
認識されないオプションキーは無視されず、E222を発生させます。
デフォルトの丸め(half up)
次の例では、デフォルトのhalf-upモードを使用して丸めます。
Formula
round_places(Decimal('11.545'), 2)出力
11.55銀行丸め(half to even)
次の例では、銀行丸めのhalf to evenを使用して丸めます。
Formula
round_places(Decimal('11.545'), 2, {mode: 'half_even'})出力
11.54floorモードを使用して丸める
次の例では、floorモードを使用して丸めます。
Formula
round_places(Decimal('11.545'), 2, {mode: 'floor'})出力
11.54round_significant
Decimalを、小数点以下の桁数ではなく有効桁数に丸めます。パディングは行いません。
round_significant(decimal, digits, options)| パラメーター | 説明 |
|---|---|
| decimal | 丸めるDecimal。 |
| digits | 保持する有効桁数。 |
| options | round_placesと同じmode値を含むオプションのマップ。 |
3有効桁数に丸める
次の例では、数値を3有効桁数に丸めます。
Formula
round_significant(Decimal('1234.5'), 3)出力
1230ユースケース: 各請求書明細をセント単位に丸める
単価は小数点以下3桁で届きますが、宛先の会計システムでは2桁のみ受け付けます。 round_placesを使用して、各請求書明細を小数点以下2桁に丸めます。
入力
{
"lines": [
{"sku": "WID-1", "unit_price": "12.335", "qty": 3},
{"sku": "GAD-7", "unit_price": "99.005", "qty": 1}
]
}Formula
_.lines >> map_by(l ~> {
sku: l.sku,
total: round_places(Decimal(l.unit_price) * l.qty, 2)
})出力
[
{"sku": "WID-1", "total": 37.01},
{"sku": "GAD-7", "total": 99.01}
]価格は最初からDecimalのまま保持されるため、乗算は正確で、最後の丸めでのみ何らかの損失が発生します。代わりに最初にFloat読み取りを行うと、2回丸めが行われ、2回目の丸めはすでに近似値になっている数値に適用されます。
絶対値
次の関数は、符号を破棄して数値の大きさを返します。
abs
符号を破棄して、数値の大きさを返します。 Durationも受け付けます。
abs(value)| パラメーター | 説明 |
|---|---|
| value | NumberまたはDuration。 |
負の数値の絶対値
次の例では、負の数値の絶対値を返します。
Formula
abs(-42)出力
42数値をテストする
次の関数は、通常の数値と特別なFloat値を区別します。数値以外の引数は、falseを返すのではなくE100を発生させます。
finite?
通常の数値であるInteger、Decimal、またはFloatの場合、trueを返します。
finite?(number)| パラメーター | 説明 |
|---|---|
| number | テストする数値。 |
通常のfloatは有限
次の例では、通常のfloatをテストします。
Formula
finite?(1.0)出力
trueInfinityは有限ではない
次の例では、正の無限大をテストします。
Formula
finite?(Float('Infinity'))出力
falseinfinite?
値が正の無限大または負の無限大の場合、trueを返します。
infinite?(number)| パラメーター | 説明 |
|---|---|
| number | テストする数値。 |
正の無限大を検出する
次の例では、正の無限大をテストします。
Formula
infinite?(Float('Infinity'))出力
truenan?
値がFloatの"数値ではない"である場合、trueを返します。
nan?(number)| パラメーター | 説明 |
|---|---|
| number | テストする数値。 |
通常の数値はNaNではない
次の例では、通常の数値をテストします。
Formula
nan?(1.0)出力
falseこれらの値はゼロ除算からは発生しない
ゼロで除算すると、無限大を生成するのではなくE200が発生するため、WEL式が暗黙的に無限大を生成することはありません。 InfinityおよびNaNは、それらを許可するシステムからデータが届いた場合に表示されます。 present?はすでに両方を存在しないものとして扱うため、presenceフォールバックは明示的なチェックなしでそれらを検出します。
ビット幅
次の関数は、整数の表現に必要なビット数を測定します。
int_bit_size
ビット補数エンコードで整数を表現するために必要なビット数を返します。
int_bit_size(integer)| パラメーター | 説明 |
|---|---|
| integer | 測定する整数。 |
255に必要なビット数
次の例では、255に必要なビット数を測定します。
Formula
int_bit_size(255)出力
9関連情報
最終更新日: