プロが教える店舗&オフィスのセキュリティ対策術

1. A列には数値を入力。
2. B1セルに、=ROUNDDOWN((A1-INT(A1))/0.6,0) を入力。下までコピー。

他の人の質問を見ていて、https://oshiete.goo.ne.jp/qa/10553953.html
10.6 を 11.0(10時間60分)に変換したいらしく、小数点以下の 0.6 を 1 に変換する数式を入力したのだが、「1」になるものと「0」になるものに分かれてしまい上手くいかない。
なぜだ?

「「1」になるものと「0」になるものに分か」の質問画像

質問者からの補足コメント

A 回答 (4件)

0.6 の場合、{0.6 - int(0.6)} / 0.6 = {0.6 - 0} / 0.6 = 1 であるから rounddown したら 1 になる。


{20.6 - int(20.6)} / 0.6 = {20.6 - 20} / 0.6 = 1
{10.6 - int(10.6)} / 0.6 = 1 のように見えて、実は 0.99999999999999999 であるから、rounddown したら 0 になる。
    • good
    • 0

https://qiita.com/Q11Q/items/84b380b20ef51eca929c

この辺絡み。自分は未検証だけど
    • good
    • 0

『浮動小数点丸め誤差』という名前で知られています。



2bit の演算(足し算を含め)では、どうしても、小数点を扱うと誤差が発生してしまいます。だから、こういう場合は、ROUNDで、小数点第6位ぐらいを丸める方法が一般的です。10進では、こういう問題は発生しません。

この話の大本の原因は、Excelを作った時に、Microsoft 社では、おそらくパテントの都合で、他社(=IBM)から貰い受けなかったために起きた問題だろうということでしょう。ほとんどの会社は、この浮動小数点誤差の問題は、対応していたそうですから。

Microsoft 社では、ROUND関数で対処するように言っています。

「Excel で浮動小数点演算の結果が正しくない場合がある」
https://support.microsoft.com/ja-jp/help/78113/f …

=ROUND((A1-INT(A1))/0.6,6)
しかし、また、数字とは別に、時間丸め誤差というものもあります。要するに、表示の時間と中身の数値とは違いますから、時間値をドラッグ・コピーすると、誤差が発生してしまいます。

時間値 小数点を含む数値
10:11 0.42430555556
10:21 0.43125000000
10:31 0.43819444444
10:41 0.44513888889
10:51 0.45208333333
11:01 0.45902777778
11:11 0.46597222222
11:21 0.47291666667
11:31 0.47986111111
11:41 0.48680555556
11:51 0.49375000000
    • good
    • 0

リンク先を見ました。



私は、VBA専門で回答していますが、関数の質問にはしません。
それで、リンク先には、つけませんが、時間(表示)丸めを利用して、このようにすればよいのでは良いかと思いました。

書式は、[hh].mm (中は点)
=(INT(A1)+RIGHT(TEXT(A1,"00.00"),2)/60)/24
但し、正の値のみ。
-------
『浮動小数点丸め誤差』対処法として、3つの方法があります。
1. ROUND で必要な桁までを四捨五入する方法(小数点第7位以降は通常は不要)
2.テキスト化する方法(固定小数点法と呼ばれる)-FIXED関数やTEXT関数がある
3.整数にする方法。(整数化法と呼ばれる)。計算を整数上で行って、最後に割り算で元に戻す方法。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!