在PHP中检测float是否具有零分数值(例如125.00)的最佳方法是什么?

时间:2010-11-23 22:07:33

标签: php function math

请参阅,我想写一个函数,它接受一个浮点数参数并将浮点数舍入到最接近的货币值(一个带有两个小数位的浮点数),但是如果浮点参数的零分数(即后面全部为零)小数位)然后它将float作为整数返回(或者截断小数部分,因为它们都是零。)。

然而,我发现我无法弄清楚如何确定一个分数是否具有零分数。我不知道是否有PHP函数已经这样做了。我看了。我能想到的最好的方法是先将浮点数转换为整数,然后再从浮点数中减去整数部分,然后检查差值是否等于零。

6 个答案:

答案 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