如何确定作为字符串传递的数值的类型,而不会丢失数据或转换为错误的数据类型

问题描述 投票:0回答:3

我想允许用户通过在线表单提交数值,但我遇到了一个问题,试图验证提交值的正确数据类型(整数或浮点数)。

让我们说用户提交:

3.14

我不能使用is_float(),因为用户值在技术上是一个字符串。

floatval()可以工作,除非用户只提供一个整数floatval()仍然认为它是float而不是整数。

gettype(floatval("3"))

返回float,但我需要它返回整数。

我甚至尝试检查它是否是这样的整数:

is_int(floatval(3)) // returns false

但为什么上面的回报是假的呢?下面打印3就像是一个整数:

echo floatval(3)

因此,我需要一个能够分辨浮点数和作为字符串传递的整数之间的区别的函数,因此它不能

  1. 将一个整数作为float传递。
  2. 不会将float截断为整数。

使用正则表达式进行模式检查可能是一种解决方案,但还有其他选择吗?

注意:我没有使用类或对象,如果可能,我不愿意。

php
3个回答
1
投票

将它转换为浮点数和整数,然后检查它们是否相等。

$i = intval($input);
$f = floatval($input);
if ($i == $f) {
    $type = "int";
} else {
    $type = "float";
}

0
投票

以下功能将解决您的问题

function checkType($inputNumber){
    if (strpos($inputNumber, '.') !== false) {
        return 'Number is float';
    } else {
        return 'Number is integer';
    }
}

echo checkType(3.5);  o/p Number is float.
echo checkType(3);  o/p Number is integer.

0
投票

首先,如果你检查浮动,那么显然它只会在浮点值天气上返回true或false,或者它不是整数。

你正在检查浮动,那么你怎么能期望它将返回整数。使用intval()来检查整数值。

<?php
    echo intval(42);                      // 42
    echo intval(4.2);                     // 4
    echo intval('42');                    // 42
    echo intval('+42');                   // 42
    echo intval('-42');                   // -42
    echo intval(042);                     // 34
    echo intval('042');                   // 42
    echo intval(1e10);                    // 1410065408
    echo intval('1e10');                  // 1

或者你可以做一件事,你可以检查点(。)是否存在然后用floatval()检查,然后检查intval()

您也可以执行以下操作

<?php

  $a = '1.6';

  if(str_pos($a, '.') !== 'false){
     $a = intval($a);
  }else{
     $a = floatval($a);
  }
© www.soinside.com 2019 - 2024. All rights reserved.