Bra*_*tie 155
$n = 1.25;
$whole = floor($n); // 1
$fraction = $n - $whole; // .25
Run Code Online (Sandbox Code Playgroud)
然后比较1/4,1/2,3/4等.
如果是负数,请使用:
function NumberBreakdown($number, $returnUnsigned = false)
{
$negative = 1;
if ($number < 0)
{
$negative = -1;
$number *= -1;
}
if ($returnUnsigned){
return array(
floor($number),
($number - floor($number))
);
}
return array(
floor($number) * $negative,
($number - floor($number)) * $negative
);
}
Run Code Online (Sandbox Code Playgroud)
在$returnUnsigned作出停止其-1.25到-1和-0.25
she*_*mer 34
此代码将为您拆分:
list($whole, $decimal) = explode('.', $your_number);
Run Code Online (Sandbox Code Playgroud)
其中$ whole是整数,$ decimal将包含小数点后的数字.
ale*_*lex 19
只是为了与众不同:)
list($whole, $decimal) = sscanf(1.5, '%d.%d');
Run Code Online (Sandbox Code Playgroud)
作为额外的好处,它只会在双方由数字组成的地方分开.
the*_*ude 13
floor()方法不适用于负数.每次都有效:
$num = 5.7;
$whole = (int) $num; // 5
$frac = $num - (int) $num; // .7
Run Code Online (Sandbox Code Playgroud)
...也适用于否定(相同的代码,不同的数字):
$num = -5.7;
$whole = (int) $num; // -5
$frac = $num - (int) $num; // -.7
Run Code Online (Sandbox Code Playgroud)
将其转换为int并减去
$integer = (int)$your_number;
$decimal = $your_number - $integer;
Run Code Online (Sandbox Code Playgroud)
或者只是为了比较得到小数
$decimal = $your_number - (int)$your_number
Run Code Online (Sandbox Code Playgroud)
一小段路(使用楼层和fmod)
$var = "1.25";
$whole = floor($var); // 1
$decimal = fmod($var, 1); //0.25
Run Code Online (Sandbox Code Playgroud)
然后将$ decimal与0,.25,.5或.75进行比较
PHP 5.4+
$n = 12.343;
intval($n); // 12
explode('.', number_format($n, 1))[1]; // 3
explode('.', number_format($n, 2))[1]; // 34
explode('.', number_format($n, 3))[1]; // 343
explode('.', number_format($n, 4))[1]; // 3430
Run Code Online (Sandbox Code Playgroud)
对于那些想要将整数部分和小数部分拆分为两个整数分隔值的人来说,这只是一个新的简单解决方案:
5.25 -> 整数部分:5;小数部分:25
$num = 5.25;
$int_part = intval($num);
$dec_part = $num * 100 % 100;
Run Code Online (Sandbox Code Playgroud)
这种方式不涉及基于字符串的函数,并且可以防止其他数学运算中可能出现的准确性问题(例如使用 0.49999999999999 而不是 0.5)。
还没有对极值进行彻底测试,但它对我来说对于价格计算来说效果很好。
但是,要小心!现在从-5.25你得到: 整数部分:-5;小数部分:-25
如果您想始终获得正数,只需abs()在计算前添加:
$num = -5.25;
$num = abs($num);
$int_part = intval($num);
$dec_part = $num * 100 % 100;
Run Code Online (Sandbox Code Playgroud)
最后,打印带有 2 位小数的价格的奖励片段:
$message = sprintf("Your price: %d.%02d Eur", $int_part, $dec_part);
Run Code Online (Sandbox Code Playgroud)
...这样您就可以避免得到 5.5 而不是 5.05。;)