你如何使Javascript在函数中解析为十进制而不是整数?

时间:2016-12-23 15:32:23

标签: javascript

我有一个函数接受几种不同类型的输入,包括:

  • 字符串,
  • 数,
  • 日期和
  • 浮动。

我得出的方式是否输入的数字是浮点数是这样的:

function getType(i){
    if(String(i).indexOf('.') > -1)){
        return "float";
    } else {
        return "number";
    }
}

这适用于每个浮点数,正数和负数,除了0.0,0.00,0.000等

每当我输入一个等于0的十进制值时,它会自动从十进制转换为整数,因此输入类型不会注册为Float而是注册为Number。如何阻止这种情况发生,而是读取" i"的真实输入值。在功能?

(请注意:不能在字符串中封装Float)

2 个答案:

答案 0 :(得分:4)

你做不到。在传递给函数之前,您的数字文字将被解析为数字值。该函数只接收数字值0,无法知道您是写00.0还是0.00,还是更复杂的表达式,例如1-1+false

这种信息不会在JavaScript中公开。您可能设法做到的唯一方法是获取脚本的源代码,并使用您自己的JS解析器。

顺便说一下,将数字转换为字符串并搜索.是一种不好的方法,如果数字大到足以将其字符串化为指数形式,它将会失败。测试数字是否为整数的正确方法是Number.isInteger

答案 1 :(得分:-1)

试一试:

function getType(value) {

                var isInt = isIntValue(value);
                if (isInt) {
                    //return parseInt(value, 10);
                    return "number";
                } else {

                    var isDecimal = isDecimalValue(value);

                    if (isDecimal) {
                        //return parseFloat(value);
                        return "float";
                    } else {
                        return typeof value;
                    }


                }

            }

            function isIntValue(value) {
                var patron = /^[-]?[0-9]+$/;
                return (patron.test(value.toString()));
            }

            function isDecimalValue(value) {
                var patron = /^[-]?[0-9]+[\.]?[0-9]+$/;
                return patron.test(value.toString());
            }

            //Test here.
            alert(getType("1.22"))