检查数字是否为小数

Cod*_*oso 38 php function decimal

我需要检查PHP是否用户输入了十进制数字(美国方式,带小数点:X.XXX)

有任何可靠的方法吗?

cwa*_*ole 90

你可以从is_float中获得你想要的大部分内容,但是如果你真的需要知道它是否有小数,那么你上面的函数并不是很远(尽管语言不对):

function is_decimal( $val )
{
    return is_numeric( $val ) && floor( $val ) != $val;
}
Run Code Online (Sandbox Code Playgroud)

  • 例如10.00仍然返回false. (13认同)

Nig*_*Owl 22

如果您需要知道的是变量中是否存在小数点,那么这将完成工作...

function containsDecimal( $value ) {
    if ( strpos( $value, "." ) !== false ) {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这不是一个非常优雅的解决方案,但它适用于字符串和浮点数.

确保在strpos测试中使用!==而不是!=否则会得到不正确的结果.


771*_*120 18

如果你想要"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
}
Run Code Online (Sandbox Code Playgroud)

例子:

(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
Run Code Online (Sandbox Code Playgroud)

说明:

fmod 返回参数除法的浮点余数(modulo),(因此(!== 0.00))

模数运算符 - 为什么不使用模数运算符?例如($val % 1 != 0)

PHP文档:

在处理之前,模数的操作数被转换为整数(通过去除小数部分).

这将有效地破坏op的目的,在其他语言如javascript中你可以使用模数运算符

  • `0.00` 可以替换为 `0.0`。额外的零没有任何作用。 (3认同)

k10*_*102 11

解决这个问题的另一种方法:preg_match('/^\d+\.\d+$/',$number);:)


Fel*_*ing 7

你发布的功能不是PHP.

看看is_float [docs].

编辑:我错过了"用户输入值"部分.在这种情况下,您实际上可以使用正则表达式:

^\d+\.\d+$
Run Code Online (Sandbox Code Playgroud)


小智 5

我传递了一个字符串,想知道它是否为十进制。我结束了这个:

function isDecimal($value) 
{
     return ((float) $value !== floor($value));
}
Run Code Online (Sandbox Code Playgroud)

我在零的两端进行了一系列测试,包括小数和非小数,它似乎有效。