PHP: numaralar> = 2147483647 için intval () eşdeğeri

5 Cevap php

Ben bir girdi olarak numaralarını almak her PHP 5, I intval () kullanın. Bu şekilde, ben hiçbir dizeleri veya yüzer numaralarını almak emin olmak istiyorum. Benim giriş numaraları tüm tam sayılar olmalıdır. Sayıları> = 2147483647 olsun Ama, imzalı tamsayı sınırı geçtiği.

Ne tüm boyutlarda numaralar için bir intval () eşdeğeri olması için ne yapabilirim?

İşte ben istiyorum ne:

<?php
$inputNumber = 3147483647.37;
$intNumber = intvalEquivalent($inputNumber);
echo $intNumber; // output: 3147483647
?>

Şimdiden çok teşekkür ederiz!

Edit: bazı cevaplar dayanarak, ben eşdeğer bir fonksiyonu kod denedim. Ama henüz () yaptığı tam olarak intval çalışmıyor. Bunu nasıl artırabilir? Bunun nesi yanlış?

function intval2($text) {
    $text = trim($text);
    $result = ctype_digit($text);
    if ($result == TRUE) {
        return $text;
    }
    else {
        $newText = sprintf('%.0f', $text);
        $result = ctype_digit($newText);
        if ($result == TRUE) {
            return $newText;
        }
        else {
             return 0;
        }
    }
}

5 Cevap

Bu işlevi deneyin, düzgün intval yaptığı gibi herhangi bir ondalık kaldırmak ve herhangi bir sayısal olmayan karakterleri kaldırmak olacaktır.

<?php
function bigintval($value) {
  $value = trim($value);
  if (ctype_digit($value)) {
    return $value;
  }
  $value = preg_replace("/[^0-9](.*)$/", '', $value);
  if (ctype_digit($value)) {
    return $value;
  }
  return 0;
}

// SOME TESTING
echo '"3147483647.37" : '.bigintval("3147483647.37")."<br />";
echo '"3498773982793749879873429874.30872974" : '.bigintval("3498773982793749879873429874.30872974")."<br />";
echo '"hi mom!" : '.bigintval("hi mom!")."<br />";
echo '"+0123.45e6" : '.bigintval("+0123.45e6")."<br />";
?>

Burada üretilen çıktı:

"3147483647.37" : 3147483647
"3498773982793749879873429874.30872974" : 3498773982793749879873429874
"hi mom!" : 0
"+0123.45e6" : 0

Umarım ki olur!

Ayrıca intial sayısal bölümden sonra her şeyi kaldırmak için normal ifadeleri kullanabilirsiniz:

<?php
$inputNumber = "3147483647.37";
$intNumber = preg_replace('/^([0-9]*).*$/', "\\1", $inputNumber);
echo $intNumber; // output: 3147483647
?>

Kullanmak ya number_format($inputNumber, 0, '', '')

Yoksa sadece bir tam sayı daha sonra kullanmak olmadığını kontrol etmek istiyorsanız ctype_digit($inputNumber)

Ayrıca yüzer sayısal olarak, önerilen is_numeric kullanmayın. örneğin "+0123.45e6" is_numeric kabul alır

Number_format ek olarak, sprintf'i kullanabilirsiniz:

sprintf("%.0f", 3147483647.37) // 3147483647

Ancak, her iki çözeltiler, örneğin, yüzdürme taşma muzdarip:

sprintf("%.0f", 314734534534533454346483647.37) // 314734534534533440685998080