分→時間の計算
Uipathを使って、日々の勤怠状況をスプレッドシートに出力するRPAを作成した際に、ちょっと悩んでしまったので備忘録を残します。
計算自体は算数レベルの問題です。
問題点
勤怠システムのAPIで取得した時間データが分単位で、出力したいのは時間単位でした。
例
所定労働時間が2300分と取得できたのでこれを時間に直すとします。
最初にやったこと
まずは単純に
2300/60≒38.3(小数点第二以下は切り捨て)
2300分は38.3時間!よしこれでいいと思ったら、手作業でCSVで出力しているデータと小数点以下の値が若干違いました。
確認してみると、この場合の38.3時間は38時間30分という意味になってしまうとのこと。
最初に行った計算だと38.5が38時間30分ということになるので計算の仕方が誤りであることが分かりました。
じゃあどうした?
用意した変数
- 所定時間_分(int32型)
- 所定時間_時間(Double型)
手順1:変換したい値の用意
左辺:所定時間_分
右辺:2300
手順2:分→時間に変換
右辺詳細
左辺:所定時間_時間
右辺:Math.floor(所定時間_分/60))+(Math.floor(所定時間_分 Mod 60)/100)
これで完了です。
解説
難しい計算は一切ありませんが一応・・
使用したメソッド
- Math.floor・・・小数点以下切り捨て
- Mod・・・割ったあまり(Modは演算子・・?)
前半「Math.floor(所定時間_分/60)」
割った商を求める式です。
所定時間_分を60で割った数の小数点以下を切り捨てています。
2300÷60=38.33333333....
小数点以下を切り捨てて「38」になりますね。
後半「Math.floor(所定時間_分 Mod 60)/100」
所定時間_分を60で割ったあまりを算出し、小数点以下を切り捨て100で割る
2300÷60=38あまり20
20÷100=0.2
前半と後半を足し算して38+0.2=38.2
求めていた答えが出ました。
後半はもしかしてMath.floorいらない・・?と思って試しましたが、プログラム上の計算だとぴったり20ではなく、「20.00000000001」となっていました。
2進数に直して計算されているから誤差が出てしまうのでしょう。(多分)
割ったあまりはUipath(.net)では「Mod」ですが、javascriptなら「%」なので間違えないように気を付けたいと思います。
Discussion