请参阅,我想写一个函数,它接受一个浮点数参数并将浮点数舍入到最接近的货币值(一个带有两个小数位的浮点数),但是如果浮点参数的零分数(即后面全部为零)小数位)然后它将float作为整数返回(或者截断小数部分,因为它们都是零。)。
然而,我发现我无法弄清楚如何确定一个分数是否具有零分数。我不知道是否有PHP函数已经这样做了。我看了。我能想到的最好的方法是先将浮点数转换为整数,然后再从浮点数中减去整数部分,然后检查差值是否等于零。
答案 0 :(得分:12)
if($value == round($value))
{
//no decimal, go ahead and truncate.
}
此示例将值与自身进行比较,舍入为0位小数。如果四舍五入的值与该值相同,则您没有小数部分。简单明了。
答案 1 :(得分:10)
PHP类型杂耍技能的小技巧
if ($a == (int) $a) {
// $a has a zero fraction value
}
答案 2 :(得分:1)
function whatyouneed($number) {
$decimals = 2;
printf("%.".($number == (int)($number) ? '0' : $decimals)."F", $number);
}
所以基本上,如果你想要2位小数,它可以是printf("%.2F")
,如果你不想要,也可以是printf("%.2F")
。
答案 3 :(得分:1)
我认为最好的方法:
if ((string)$value == (int)$value){
...
}
示例:
$value = 2.22 * 100;
var_dump($value == (int)$value); // false - WRONG!
var_dump($value == round($value)); // false - WRONG!
var_dump((string)$value == (int)$value); // true - OK!
答案 4 :(得分:0)
嗯,问题是花车不准确。 Read here如果你有兴趣找出原因。我要做的是确定准确度,例如,3位小数,以及基本精确度。为此,您将它乘以1000,将其转换为int,然后检查$ your_number%1000 == 0。
$mynumber = round($mynumber *1000);
if ($mynumber % 1000==0)
{ isInt() }
答案 5 :(得分:0)
您知道,不必编写函数来执行此操作,已经存在一个函数
$roundedFloat = (float)number_format("1234.1264", 2, ".", ""); // 1234.13
如果你想保留尾随.00
,只需省略浮动演员(虽然它会返回一个字符串):
$roundedFloatStr = number_format("1234.000", 2, ".", ""); // 1234.00