私のコード:
$baseprice=1705000/1.1;
var_dump($baseprice);
$parseprice=intval($baseprice);
var_dump($parseprice);
結果 :
float(1550000) int(1549999)
ご覧のとおり、float から int に変換するときに 1 つの数字を失いました。どこにあるのでしょうか。この場合、データを失うことなく変換するための解決策は何ですか。ありがとうございます。
精度を失う浮動小数点数を使用しています (このリンクを参照してください)。
通貨を扱う場合は、整数を使用し、セント、ペンス、ペニヒスなどで作業します。表示直前に通貨フォーマットに変換します。
解決策は以下のようになります
$baseprice=1705000/1.1;
var_dump($baseprice);
$parseprice=intval(ceil($baseprice));
var_dump($parseprice);
出力:
float(1550000) int(1550000)
問題は、フロートを計算するときです。なぜそれらが以下のように異なるのかまだわかりません
$baseprice= 1705000/1.1 ; // 1550000
var_dump( decbin( $baseprice ));
var_dump( decbin(1550000));
これを修正するには
$baseprice = round( $baseprice );
float から integer に値を丸める前に、int に変換できます
$baseprice=1705000/1.1;
var_dump($baseprice);
//Before float to integer round the value then you can convert to int
$baseprice =round($baseprice);
$parseprice=intval($baseprice);
var_dump($parseprice);