- ベストアンサー
同じ時間なのに、60進と10進とで給与の金額に誤差が生じる
時間の計算方法がA社とB社で異なります。 それによって同じ時間なのに 給与の金額が異なります。 A社→60進 B社→10進 元の時間「100.88」(10進) ------------ A社→10進から60進に計算し直しています。 整数(時間)はそのままで、小数点以下(分)を60で掛けて、端数を切り捨てています。 例(100.88 → 100 & 0.88*60=52.8)=100:52 0.8は切り捨てています。 ACCESSでの計算例 CDbl(Fix([時間]) & "." & Fix(Mid([時間], InStr(1, [時間], ".", vbBinaryCompare)) * 60)) ----- B社→元の時間「100.88」をそのまま使用 ------------ 時給(1000円)に換算すると・・・ A社→「100:52」 時間と分とに分けて計算 時間→時間×時給 + 分→小数点切り上げ(分×時給×100÷60) 答え=100867円 ACCESSでの計算例 Fix(CCur(([時給]*Int([時間]))+usRoundUp([時給]*([時間]-Int([時間]))*100/60,0))) ----- B社→「100.88」 時間×時給 100.88*1000 答え=100880円 ------------ ご質問したいことは、 A社→100867円、B社→100880円と、 どうして「13円」の発生するのか ご教示して頂けたら幸いです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
単純に、「A社は 52.8 分の、0.8分を 切り捨てている」からです。 時給1,000円なら、1分あたりの給料を単純に 計算すると、 1,000÷60=16.66... 切り捨てたのが、0.8分ですから、この0.8倍 16.66...×0.8 = 13.33(円) この分が、「切り捨てられている」だけです。
その他の回答 (4)
- srafp
- ベストアンサー率56% (2185/3855)
1番様の書かれている通りで、0.8[60進法]を無視しているためです。 1,000×0.8/60≒13 千円に対して整数の部分で差異を生じさせないためには、少なくとも換算後の値は0.001(小数点以下第3位)までを同じにしておかないとダメです。
お礼
とても参考になりました。
- mumu_bb
- ベストアンサー率50% (5/10)
> 0.8は切り捨てています。 > 分→小数点切り上げ(分×時給×100÷60) この式の100は、ここだけみるといらない気が・・ 切り捨てた分を計算すると 0.8(分)*1000/60 =0.13333・・・ だいたい、13円になりますよ。
お礼
とても参考になりました。
- debukuro
- ベストアンサー率19% (3634/18947)
ホーホー 100.88時間ねー 10進時計とは変わった時計ですな~(⌒▽⌒)アハハ! 単位の換算をするときの端数処理の仕方によって差が出るのは当然です
お礼
とても参考になりました。
- i11235m
- ベストアンサー率33% (1/3)
全くの素人ですが >0.8は切り捨てています。 >小数点切り上げ 直感的にこれが誤差の原因なきがします。
補足
素早いご回答誠にありがとうございました。 私も >0.8は切り捨てています。 >小数点切り上げ が原因だとは思うのですが どうして0.8切り捨てると 13円誤差が生じるのかが分からないのですが・・・。
お礼
とても参考になりました。