0

さて、私は一日中この問題に取り組んできました、そしてそれはいくつかの助けの必要性を修飾すると思います。

PHP

$hour1 = (float) $date1 / 10000;
$hour1 = (float) floor($hour1);

$hour2 = (float) $date2 / 10000;
$hour2 = (float) floor($hour2);

$minute1 = (float) $date1 / 10000;
$minute1 = (float) $minute1 - floor($minute1);
$minute1 = (float) $minute1 / 60;
$minute1 = (float) $minute1 * 100;

$minute2 = (float) $date2 / 10000;
$minute2 = (float) $minute2 - floor($minute2);
$minute2 = (float) $minute2 / 60;
$minute2 = (float) $minute2 * 100;

$date = (float) ($hour1 + minute1) - ($hour2 + minute2);
$date = floatval($date);

ご覧のとおり、型キャストを少しやりすぎました。

変数値

$minute1 = .564478
$hour1 = 19

$minute2 = .9885546
$hour2 = 8

$date = (float) ($hour1 + minute1) - ($hour2 + minute2);

$date = (float) (19 + .564478) - (8 + .9885546);

今与えられた結果は実際に

11

ではなく

10.575932......

不思議なことに、変数なしでこれを行うとecho (19 + .564478) - (8 + .9885546);...浮動小数点の結果が得られ10.575932......ます。

ほとんどのプログラミング言語がフローティングポイントを完成させることを理解していますが、明示的に型キャストするまでを含むすべてを試しました。ここで何が起こっているのですか?

4

1 に答える 1

1
$date = (float) ($hour1 + minute1) - ($hour2 + minute2);

minute1$ 前とminute2??を忘れていませんか?

あなたが持っていた場合、PHPはこの変数を定数として扱い、$hour1 - $hour2魔女が返す11のみをカウントします

それは次のように見えるはずです

$date = (float) ($hour1 + $minute1) - ($hour2 + $minute2);
于 2012-10-25T00:12:24.823 に答える