如果用户输入了十进制数字(美国方式,带小数点:X.XXX),我需要检查PHP
有任何可行的方法吗?
答案 0 :(得分:86)
你可以从is_float获得你想要的大部分内容,但如果真的需要知道它是否有小数,那么你上面的函数就不是很远了(尽管如此)错误的语言):
function is_decimal( $val )
{
return is_numeric( $val ) && floor( $val ) != $val;
}
答案 1 :(得分:22)
如果你需要知道的是变量中是否存在小数点,那么这将完成工作......
function containsDecimal( $value ) {
if ( strpos( $value, "." ) !== false ) {
return true;
}
return false;
}
这不是一个非常优雅的解决方案,但它适用于字符串和浮点数。
确保在strpos测试中使用!==而不是!=否则您将得到不正确的结果。
答案 2 :(得分:13)
如果你想要“10.00”返回真实检查夜猫子的答案
如果您想知道小数是否有值,您可以使用此答案。
适用于所有类型(int,float,string)
if(fmod($val, 1) !== 0.00){
// your code if its decimals has a value
} else {
// your code if the decimals are .00, or is an integer
}
(fmod(1.00, 1) !== 0.00) // returns false
(fmod(2, 1) !== 0.00) // returns false
(fmod(3.01, 1) !== 0.00) // returns true
(fmod(4.33333, 1) !== 0.00) // returns true
(fmod(5.00000, 1) !== 0.00) // returns false
(fmod('6.50', 1) !== 0.00) // returns true
fmod
返回参数除法的浮点余数(modulo),(因此(!== 0.00))
模数运算符 - 为什么不使用模数运算符?例如。 ($val % 1 != 0)
来自PHP docs:
在处理之前,模数的操作数被转换为整数(通过去除小数部分)。
哪个会有效地破坏op目的,在javascript这样的其他语言中你可以使用模数运算符
答案 3 :(得分:11)
解决此问题的另一种方法:preg_match('/^\d+\.\d+$/',$number);
:)
答案 4 :(得分:7)
答案 5 :(得分:4)
我传递了一个字符串,想知道它是否是小数。我最终得到了这个:
function isDecimal($value)
{
return ((float) $value !== floor($value));
}
我在零的两边运行了一堆测试,包括小数和非小数,它似乎有效。
答案 6 :(得分:1)
这是一种更容忍的方式来处理用户输入。这个正则表达式将匹配" 100"或" 100.1"但不允许负数。
/^(\d+)(\.\d+)?$/
答案 7 :(得分:1)
我用这个:
function is_decimal ($price){
$value= trim($price); // trim space keys
$value= is_numeric($value); // validate numeric and numeric string, e.g., 12.00, 1e00, 123; but not -123
$value= preg_match('/^\d$/', $value); // only allow any digit e.g., 0,1,2,3,4,5,6,7,8,9. This will eliminate the numeric string, e.g., 1e00
$value= round($value, 2); // to a specified number of decimal places.e.g., 1.12345=> 1.12
return $value;
}
答案 8 :(得分:0)
$lat = '-25.3654';
if(preg_match('/./',$lat)) {
echo "\nYes its a decimal value\n";
}
else{
echo 'No its not a decimal value';
}
答案 9 :(得分:0)
查找任何一个过帐值的简单方法是整数和浮点数,这样对您有帮助
$postedValue = $this->input->post('value');
if(is_numeric( $postedValue ) && floor( $postedValue ))
{
echo 'success';
}
else
{
echo 'unsuccess';
}
如果您给出10或10.5或10.0,则如果您定义任何不带点的字符或特殊字符,结果将是成功的
答案 10 :(得分:0)
如果您正在使用表单验证。然后在这种情况下表单发送字符串。 我使用以下代码检查表单输入是否为十进制数。 我希望这对你也有用。
function is_decimal($input = '') {
$alphabets = str_split($input);
$find = array('0','1','2','3','4','5','6','7','8','9','.'); // Please note: All intiger numbers are decimal. If you want to check numbers without point "." then you can remove '.' from array.
foreach ($alphabets as $key => $alphabet) {
if (!in_array($alphabet, $find)) {
return false;
}
}
// Check if user has enter "." point more then once.
if (substr_count($input, ".") > 1) {
return false;
}
return true;
}
答案 11 :(得分:0)
最简单的解决方案是
if(is_float(2.3)){
echo 'true';
}
答案 12 :(得分:0)
一个完全的淤泥......但是嘿它有效!
$numpart = explode(".", $sumnum);
if ((exists($numpart[1]) && ($numpart[1] > 0 )){
// it's a decimal that is greater than zero
} else {
// its not a decimal, or the decimal is zero
}
答案 13 :(得分:0)
// if numeric
if (is_numeric($field)) {
$whole = floor($field);
$fraction = $field - $whole;
// if decimal
if ($fraction > 0)
// do sth
else
// if integer
// do sth
}
else
// if non-numeric
// do sth
答案 14 :(得分:0)
is_numeric
返回true
的小数和整数。因此,如果您的用户懒洋洋地输入1
而不是1.00
,它仍会返回true
:
echo is_numeric(1); // true
echo is_numeric(1.00); // true
您可能希望使用PHP将整数转换为小数,或者让数据库为您执行此操作。
答案 15 :(得分:-1)
function is_decimal_value( $a ) {
$d=0; $i=0;
$b= str_split(trim($a.""));
foreach ( $b as $c ) {
if ( $i==0 && strpos($c,"-") ) continue;
$i++;
if ( is_numeric($c) ) continue;
if ( stripos($c,".") === 0 ) {
$d++;
if ( $d > 1 ) return FALSE;
else continue;
} else
return FALSE;
}
return TRUE;
}
上述功能的已知问题:
1)不支持“科学符号”(1.23E-123),财政(领先的$或其他)或“交易f”(C ++样式的浮动货币)或“交易货币”(USD,GBP等)
2)对与小数点匹配的字符串文件名误判:请注意,例如“ 10.0”作为文件名不能与小数点区分开,因此,如果您尝试仅从字符串和文件名中检测类型,匹配十进制名称,并且不包含路径,因此无法辨别。
答案 16 :(得分:-3)
也许尝试一下这个
!is_int()