10

私はPHP関数を知っていますfloor()が、負の数ではうまくいきません。

床の仕組みはこうだ

floor( 1234.567); //  1234
floor(-1234.567); // -1235

これは私が欲しいものです

truncate( 1234.567); //  1234
truncate(-1234.567); // -1234

-1234 を返す PHP 関数はありますか?

私はこれができることを知っていますが、単一の組み込み関数を望んでいます

$num = -1234.567;
echo $num >= 0 ? floor($num) : ceil($num);
4

6 に答える 6

20

はいintval

intval(1234.567);
intval(-1234.567);
于 2013-06-29T19:11:16.107 に答える
0

小数を目的の場所、intval、およびシフトバックにシフトできます。

function truncate($number, $precision = 0) {
   // warning: precision is limited by the size of the int type
   $shift = pow(10, $precision);
   return intval($number * $shift)/$shift;
}

int のサイズに関する警告に注意してください。これは、$numberが大きな数 ( ) で乗算される可能性が$shiftあり、結果の数値が大きすぎて整数型として格納できない可能性があるためです。おそらく浮動小数点に変換する方が良いかもしれません。

パラメータに凝って$base、それを に送ることができますintval(...)

エラー/境界チェックにも気を配る必要があります。

別のアプローチは、数値を文字列として扱い、小数点を見つけ、目的の精度に基づいて小数点以下の適切な場所で部分文字列を作成することです。相対的に言えば、それは速くはありません。

于 2016-02-19T21:34:17.497 に答える