C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

数値を切り上げる2

一年前に書いたブログの事がHatenaからメール届きました。
こちらです。
数値を切り上げる - C#ATIA
ひな祭りにこんな事書いていたんですね・・・。

最近、pythonでの競技プログラミングの記事をチラッと
見かけたのですが、そこに切り上げ・切り下げが書いてあり
"知らなかった・・・" と思っていた矢先なので、
チラッと書き残しておきます。

ズバリ、切り上げはこんな感じで済むようです。

#python
def roundUp2(v, roundUpUnit) -> float:
  return  -(-v // roundUpUnit) * roundUpUnit

小数点以下を切上げであれば単にこんな感じです

#python
  -(-v // 1)

切り下げは思い付くのですが、切り上げは思い付きませんでした。

前回のrun関数をこんな感じに変更すると

# Fusion360API Python script

import traceback
import adsk.fusion
import adsk.core

def run(context):
    ui: adsk.core.UserInterface = None
    try:
        app: adsk.core.Application = adsk.core.Application.get()
        ui = app.userInterface

        # 目的の数値
        values = [
            10,
            12.345,
            1.2345,
            1,
            0.12345,
            0.012345,
        ]

        # 切り上げ単位
        roundUpUnits = [
            0.1,
            1,
            5,
            10
        ]

        for v in values:
            for r in roundUpUnits:
                print(f'{v}[{r}] -> {roundUp(v, r)} : {roundUp2(v, r)}')

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

実行結果は

10[0.1] -> 10.0 : 10.0
10[1] -> 10 : 10
10[5] -> 10 : 10
10[10] -> 10 : 10
12.345[0.1] -> 12.4 : 12.4
12.345[1] -> 13.0 : 13.0
12.345[5] -> 15.0 : 15.0
12.345[10] -> 20.0 : 20.0
1.2345[0.1] -> 1.3 : 1.3
1.2345[1] -> 2.0 : 2.0
1.2345[5] -> 5.0 : 5.0
1.2345[10] -> 10.0 : 10.0
1[0.1] -> 1.0 : 1.0
1[1] -> 1 : 1
1[5] -> 5 : 5
1[10] -> 10 : 10
0.12345[0.1] -> 0.2 : 0.2
0.12345[1] -> 1.0 : 1.0
0.12345[5] -> 5.0 : 5.0
0.12345[10] -> 10.0 : 10.0
0.012345[0.1] -> 0.1 : 0.1
0.012345[1] -> 1.0 : 1.0
0.012345[5] -> 5.0 : 5.0
0.012345[10] -> 10.0 : 10.0

全て一致しています。大丈夫ですね。


折角なので同様の処理をVBAで! と思ったのですが、
VBAで商を求める "\" が実数はNGでした・・・。