php确定一个float变量有两个小数位

时间:2014-11-07 01:55:42

标签: php mysql mongodb

MySQL数据imoprt mongo数据库。

price float(15,2) in mysql, mongo is not float(15,2).

我想确定var $price有两个小数位。

例如。 100.00是对的,100或100.0是错误的。

eg.1

$price = 100.00;

$price有两位小数,它是对的。

eg.2

$price = 100.0;

$price没有两位小数,这是错误的。

6 个答案:

答案 0 :(得分:5)

我喜欢使用正则表达式来做这些事情

function validateTwoDecimals($number)
{
   if(preg_match('/^[0-9]+\.[0-9]{2}$/', $number))
     return true;
   else
     return false;
}

(感谢Fred-ii-进行更正)

答案 1 :(得分:2)

为了使其正常工作,数字需要用引号括起来。

使用我测试过的许多脚本,使用不带引号的$price = 100.00;无法正常工作,而$price = 100.10;则不行,所以这是最好的。

<?php 
$number = '100.00';
echo $number.'<br>';
$count = explode('.',$number);

echo 'The number of digits after the decimal point is: ' . strlen($count[1]);

if(strlen($count[1]) == 2){
echo "<br>";
echo "There is 2 decimal points.";
}

else{
echo "<br>";
echo "There is not 2 decimal points.";
}

答案 2 :(得分:2)

每个人都在围绕浮点数在其内部表示中没有多个小数位的事实。即在浮点数100 == 100.0 == 100.00 == 100.000并且都用相同的数字表示,实际上是100并以这种方式存储。

此示例中的小数位数仅在数字表示为字符串时具有上下文。在这种情况下,可以使用任何计算尾随小数点的位数的字符串函数来检查。

答案 3 :(得分:0)

格式化值后,您只需将值拆分为2个部分即可检查,例如爆炸...

$ex=explode('.',$in,2); if (strlen($ex[1])==2) 
{
 // true
}
else
{
 // false
}

但是再次,正如我已经评论过的那样,如果你真的有浮动输入,这不是一种可靠的方式,因为浮动数字没有设置小数位,即使它们出现如此,因为浮点数的舍入= &gt;字符串转换

如果您确实拥有浮动数字且希望拥有xxx.yy格式数字,您可以做什么:

1)使用round($ x,2)将float转换为字符串,因此它将舍入到2位小数。 2)按照我的描述爆炸数字,执行以下操作:

while (strlen($ex[1]<2)) {$ex[1].='0';}
$number=implode('.',$ex);

答案 4 :(得分:0)

我会使用以下函数:

function isFloatWith2Decimals($number) {
    return (bool) preg_match('/^(?:[1-9]{1}\d*|0)\.\d{2}$/', $number);
}

这也会检查您是否只有一个前导0,因此010.23之类的号码将被视为无效,而0.23之类的号码将被视为有效。

如果你不关心领先0,你可以使用更简单的方法:

function isFloatWith2Decimals($number) {
    return (bool) preg_match('/^\d+\.\d{2}$/', $number);
}

当然,数字需要作为字符串传递 - 如果你传递100.00将不被视为真,而'100.00'

答案 5 :(得分:0)

number_format($price, $numberOfDecimalDigits) === $price;

strrpos($price, '.') === strlen($price) - 1 - $numberOfDecimalDigits;

琐事:$price不应被称为&#34;浮点变量&#34;。这是一个恰好代表浮点值的字符串。 100.00作为一个浮点数为零十进制数字,100.00 === 100为浮点数:

$price = 100.00;
echo $price; // output: 100
$price2 = (float)100;
echo $price === $price2; // ouput: 1