给定,例如1.25-如何获得该数字的“ 1”和“ .25”部分?
我需要检查小数部分是否为.0,.25,.5或.75。
split()
已被弃用。
explode(".",1.10);
给出1和1,而不是1和10
给定,例如1.25-如何获得该数字的“ 1”和“ .25”部分?
我需要检查小数部分是否为.0,.25,.5或.75。
split()
已被弃用。
explode(".",1.10);
给出1和1,而不是1和10
Answers:
$n = 1.25;
$whole = floor($n); // 1
$fraction = $n - $whole; // .25
然后将其与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
);
}
在$returnUnsigned
作出停止其-1.25到-1和-0.25
intval()
或者说简单的演员(int)
表演可能比floor()
一种简短的方法(使用floor和fmod)
$var = "1.25";
$whole = floor($var); // 1
$decimal = fmod($var, 1); //0.25
然后将$ decimal与0,.25,.5或.75进行比较
(a % 1)
,并且可以很好地处理负数。
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
如果您可以指望它始终有两位小数,则可以使用字符串操作:
$decimal = 1.25;
substr($decimal,-2); // returns "25" as a string
不知道性能,但对于我的简单情况,这要好得多...
我很难找到一种方法来实际分离美元金额和小数点后的金额。我想我主要是想通了,想分享一下你们是否遇到麻烦
所以基本上...
如果价格为1234.44 ...整位数为1234,小数位数为44或
如果价格为1234.01 ...整体为1234,十进制为01或
如果价格为1234.10 ...则整体为1234,十进制为10
依此类推
$price = 1234.44;
$whole = intval($price); // 1234
$decimal1 = $price - $whole; // 0.44000000000005 uh oh! that's why it needs... (see next line)
$decimal2 = round($decimal1, 2); // 0.44 this will round off the excess numbers
$decimal = substr($decimal2, 2); // 44 this removed the first 2 characters
if ($decimal == 1) { $decimal = 10; } // Michel's warning is correct...
if ($decimal == 2) { $decimal = 20; } // if the price is 1234.10... the decimal will be 1...
if ($decimal == 3) { $decimal = 30; } // so make sure to add these rules too
if ($decimal == 4) { $decimal = 40; }
if ($decimal == 5) { $decimal = 50; }
if ($decimal == 6) { $decimal = 60; }
if ($decimal == 7) { $decimal = 70; }
if ($decimal == 8) { $decimal = 80; }
if ($decimal == 9) { $decimal = 90; }
echo 'The dollar amount is ' . $whole . ' and the decimal amount is ' . $decimal;
这里没有看到简单的模数...
$number = 1.25;
$wholeAsFloat = floor($number); // 1.00
$wholeAsInt = intval($number); // 1
$decimal = $number % 1; // 0.25
在这种情况下,两者兼得$wholeAs?
,$decimal
互不依赖。(您仅可以独立获取3个输出中的1个。)我已经展示了$wholeAsFloat
,$wholeAsInt
因为floor()
返回的是浮点型数字,即使它返回的数字始终是完整的。(这很重要,如果要将结果传递给带类型提示的函数参数。)
我希望将DateInterval实例的小时/分钟(例如96.25)的浮点数分别分为小时和分钟,即96小时15分钟。我这样做如下:
$interval = new \DateInterval(sprintf("PT%dH%dM", intval($hours), (($hours % 1) * 60)));
我不在乎秒数。