0

我们想要isInt(1.00000)返回 false。我们希望将 1.000 检测为浮点数,而不是整数。这还有可能吗?

许多人创造了isInt()功能。但他们总是检测1.0或只是1.0000整数,而不是浮点数。当我们输入1.01他们的 isInt() 成功返回 false。但它在1.000 或更多时失败:D 如何解决这个问题?还是没有办法

function isInt(i) {
    if ( i.toFixed ) {
        if ( i % 1 === 0 ) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

与其他功能一样,它在 1.03 上成功返回 false,但在 1.00000 和更多 0 上失败。我的计划:

function isInt(i) {
    if ( i.toFixed ) {
        if ( i % 1 === 0 ) {
            /** the plan, but sure, it fails
            i = i.toString().split('.');
            if ( i.length > 1 ) {
                return false;
            } else {
                return true;
            }
            **/
        } else {
            return false;
        }
    } else {
        return false;
    }
}
4

3 回答 3

6

当您(人类)想要在程序中表达一个值时,您可以使用数字文字,例如1,或2.34,或9999

当 JavaScript 解释器读取数字文字时,它会立即将它们转换为浮点表示并忘记您使用的原始文字。浮点值是一个整数基数(或“尾数”)乘以 2,得到某个整数指数m * 2^e。因此,当您使用文字时1,JavaScript 内部会记住1 * 2^0. 当1.000被解析时,JS 再次只记住1 * 2^0.

您将浮点值传递1 * 2^0给一个函数,并且您希望它根据创建该值的原始文字做出决定。这是不可能的,因为(正如我上面解释的)数字文字值一旦被解析就会立即被遗忘。

相反,您必须向函数传递一个字符串,解释器不会忘记其原始文字表述。你可能会想做这样的事情:

var myStringValue = (1.000).toString();

但这行不通。为了评估表达式(1.000).toString(),JavaScript 首先必须解析数字文字1.000,然后变成1 * 2^0. 然后将该浮点值转换toString为字符串“ 1”。toString只能访问浮点表示,而不是您的原始文字。

于 2013-08-08T13:58:51.080 回答
-2

你可以使用正则表达式

function isInt(value){
    if( String(value).search(/^-?\d+$/) != -1 ){
        return true;
    } else {
        return false;
    }
}
于 2013-08-08T13:42:12.920 回答
-3
function isInt(i){
    return String(i).match(/^\d*$/) != null;
}

如果输入包含除数字以外的任何内容,这将返回 false ..

isInt(123) --> true
isInt('a') --> false
isInt(123.1) --> false
于 2013-08-08T13:42:21.343 回答