我有一个函数接受几种不同类型的输入,包括:
我得出的方式是否输入的数字是浮点数是这样的:
function getType(i){
if(String(i).indexOf('.') > -1)){
return "float";
} else {
return "number";
}
}
这适用于每个浮点数,正数和负数,除了0.0,0.00,0.000等
每当我输入一个等于0的十进制值时,它会自动从十进制转换为整数,因此输入类型不会注册为Float而是注册为Number。如何阻止这种情况发生,而是读取" i"的真实输入值。在功能?
(请注意:不能在字符串中封装Float)
答案 0 :(得分:4)
你做不到。在传递给函数之前,您的数字文字将被解析为数字值。该函数只接收数字值0
,无法知道您是写0
,0.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"))