programing

숫자가 10진수인지 확인합니다.

powerit 2023. 8. 26. 12:25
반응형

숫자가 10진수인지 확인합니다.

사용자가 십진수를 입력했는지 PHP에서 확인해야 합니다(미국식, 십진수: X.XXX).

믿을 수 있는 방법이 있습니까?

is_float에서 원하는 것의 대부분을 얻을 수 있지만, 소수점이 포함되어 있는지 여부를 정말로 알아야 한다면 위의 함수는 (잘못된 언어임에도 불구하고) 그리 멀지 않습니다.

function is_decimal( $val )
{
    return is_numeric( $val ) && floor( $val ) != $val;
}

"10.00"이 참으로 반환되기를 원한다면 Night Owl의 답변을 확인합니다.

소수가 값을 가지고 있는지 알고 싶다면 이 대답을 사용할 수 있습니다.

모든 유형(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 인수 분할의 부동 소수점 나머지(모듈로)를 반환합니다((!== 0.00을 반환).

계수 연산자 - 계수 연산자를 사용하면 어떨까요?예.($val % 1 != 0)

PHP 문서에서:

계수의 피연산자는 처리하기 전에 (소수 부분을 제거하여) 정수로 변환됩니다.

이것은 효과적으로 목적을 파괴할 것이고, 자바스크립트와 같은 다른 언어에서 당신은 계수 연산자를 사용할 수 있습니다.

변수에 소수점이 있는지 여부만 알면 작업이 완료됩니다.

function containsDecimal( $value ) {
    if ( strpos( $value, "." ) !== false ) {
        return true;
    }
    return false;
}

이것은 매우 우아한 해결책은 아니지만 끈과 플로트로 작동합니다.

strpos 테스트에서 !=가 아닌 !==를 사용해야 합니다. 그렇지 않으면 잘못된 결과를 얻을 수 있습니다.

이 문제를 해결하는 또 다른 방법:preg_match('/^\d+\.\d+$/',$number);:)

당신이 올린 기능은 단지 PHP가 아닙니다.

[계속]확인합니다.

편집: "사용자 입력 값" 부분을 놓쳤습니다.이 경우 실제로 다음 정규식을 사용할 수 있습니다.

^\d+\.\d+$

저는 문자열을 전달받았고, 그것이 소수인지 아닌지 알고 싶었습니다.저는 결국 이렇게 되었습니다.

function isDecimal($value) 
{
     return ((float) $value !== floor($value));
}

0의 양쪽에 소수점 이하와 비소수점 이하를 포함한 여러 가지 테스트를 해봤는데, 효과가 있는 것 같았습니다.

is_numeric돌아온다true소수 및 정수의 경우.그래서 만약 당신의 사용자가 게으르게 입력한다면,1대신에1.00그것은 여전히 돌아올 것입니다.true:

echo is_numeric(1); // true
echo is_numeric(1.00); // true

PHP를 사용하여 정수를 십진수로 변환하거나 데이터베이스에서 이를 수행하도록 할 수 있습니다.

이것은 사용자 입력으로 이 문제를 처리하는 더 허용 가능한 방법입니다.이 정규식은 "100" 또는 "100.1"과 모두 일치하지만 음수는 허용되지 않습니다.

/^(\d+)(\.\d+)?$/
   // 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

나는 이것을 사용합니다:

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;
}

저는 논평할 수 없지만, 저는 이런 흥미로운 행동을 합니다.(온라인 php 테스트를 위한 웹사이트 v.7.3.19 참조)

50에 1.1을 곱하면 예상과 다른 결과가 나타납니다.1.2 또는 1.3까지 수행하면 되고, 60 또는 40과 같은 다른 숫자를 수행하면 됩니다.

$price = 50;
$price = $price * 1.1; 

if(strpos($price,".") !== false){
    echo "decimal";
}else{
    echo "not a decimal";
}

echo '<br />';

if(fmod($price, 1) !== 0.00){
    //echo fmod($price, 1);
    echo "decimal";
} else {
    echo "not a decimal";
}//end if
$lat = '-25.3654';

if(preg_match('/./',$lat)) {
    echo "\nYes its a decimal value\n";
}
else{
    echo 'No its not a decimal value';
}

완전한 덩어리..하지만 야, 효과가 있어요!

$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
}

게시된 값을 쉽게 찾을 수 있는 방법은 정수와 부동이므로 도움이 될 것입니다.

$postedValue = $this->input->post('value');
if(is_numeric( $postedValue ) && floor( $postedValue ))
{
    echo 'success';
}
else
{
   echo 'unsuccess';
}

만약 당신이 10, 10.5 또는 10.0을 준다면 당신이 점 없이 어떤 문자나 특수 문자를 정의한다면 그것은 성공하지 못할 것입니다.

어때는 요?(int)$value != $value만약true법입다니십진다라면 false그런거 아냐.

가장 간단한 해결책은

if(is_float(2.3)){

 echo 'true';

}

양식 유효성 검사 작업을 수행하는 경우.그런 다음 이 경우 send string 형식을 사용합니다.양식 입력이 소수인지 아닌지 확인하기 위해 다음 코드를 사용했습니다.이것이 당신에게도 효과가 있기를 바랍니다.

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;
}
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.23E-123), 회계(선행 달러 또는 기타), "추적 f"(C++ 스타일 변동) 또는 "추적 통화"(USD, GBP 등)를 지원하지 않습니다.

10진수와 일치하는 문자열 파일 이름에 잘못된 양수:예를 들어 파일 이름 "10.0"은 소수점과 구별할 수 없으므로 문자열에서만 형식을 탐지하려고 할 때 파일 이름이 소수점 이름과 일치하고 경로가 포함되지 않은 경우 식별이 불가능합니다.

이것도 한 번 조사해 보세요.

!is_int()

언급URL : https://stackoverflow.com/questions/6772603/check-if-number-is-decimal

반응형