私は通貨入力を扱っています。小数点以下 2 桁のみを使用してください。入力を float にキャストして 100 を掛けてみました。これは、誰かが小数点の後に 2 桁以上入力するまで問題なく動作します。
// Returns 6999.8 instead of 6999
$cents = floatval('69.998') * 100;
次に、結果を int にキャストしようとしたため、小数点以下の連続した数字は無視されます。上記の問題は解決しますが ('69.998' は 6999 になります)、浮動小数点から整数への変換を使用して新しい問題を作成します。
// Returns 6998 instead of 6999
$cents = intval(floatval('69.99') * 100);
floor() も検討しましたが、intval() と同じフロートの問題を引き起こします。
これは私が使用することを考えているものです:
$cents = intval((string)(floatval('69.99') * 100));
どちらの場合も機能しますが、ハックのように感じられ、遅くて頭が痛いので、ここで明らかな何かが欠けている可能性があります. これを行うより良い方法はありますか?