숫자가 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
'programing' 카테고리의 다른 글
canvas.toDataURL()을 사용하여 canvas를 이미지로 저장하는 방법? (0) | 2023.08.26 |
---|---|
오류: 함수에 대한 이전 프로토타입이 없습니다.이 오류가 발생하는 이유는 무엇입니까? (0) | 2023.08.26 |
JDBC(mariaDB)를 통해 선택한 행의 기본 키 값을 검색하는 방법 (0) | 2023.08.26 |
자바스크립트(jquery)가 있는 정수 값을 문자열을 반환하는 값에 추가하려면 어떻게 해야 합니까? (0) | 2023.08.26 |
파워셸의 열에서 개별 항목 선택 (0) | 2023.08.26 |