我使用函数来验证作为参数传递的数字在JavaScript中是浮点数还是整数。
该方法适用于诸如' 4.34'即小数为非零,但对于诸如' 3.0'之类的数字则失败,返回整数而不是浮点数。
这是我到目前为止能够提出的代码
function dataType(x) {
if (typeof x === 'number' && ){
if (Math.round(x) === x ){
return 'integer';
}
return 'float';
}
}
console.log(dataType(8)); //integer
console.log(dataType(3.01)); //float
console.log(dataType(3.0)); // should return float
我非常感谢有关如何在JavaScript中执行此操作的一些帮助 提前谢谢。
更新:我希望console.log(dataType(3.0));
返回浮动。
答案 0 :(得分:4)
JS中的每个数字都是浮点数。
JS中只有一种数字类型(Number
)。
因此,没有跨浏览器方式来保证:
之间的区别3
3.0
3.0000000000000
等等。
即使在现代浏览器中,(3.0000).toString( ) === "3"; //true
。
尝试在JS中强制执行数字类型安全是没有意义的 按照数字格式处理数字,根据需要使用所需的精度转换为字符串和字符串。
答案 1 :(得分:0)
试试这个
function dataType(x) {
if (typeof x === 'number' ){
if (Math.round(x) === x && x.toString().indexOf('.') < -1 ){
return 'integer';
}
return 'float';
}
}
答案 2 :(得分:0)
也许您更改输入,然后比较所做的更改?
这方面的事情,(当然可以通过某种方式简化)例如:
function isFloat(x){ // example: x = 3.00 or x = 3.99
if( typeof x === 'number' ){
var obj = {};
obj.ceil = false;
obj.floor = false;
obj.round = false;
if( Math.ceil(x+0.1) === x ){
obj.ceil = true;
}
if(Math.floor(x+0.1) === x ){
obj.floor = true;
}
if (Math.round(x) === x ){
obj.round = true;
}
if( obj.round == true){ // or use obj.floor?
return "integer";
}
if( (obj.floor == true) && (obj.round == true) ) { // either && or || not sure
return 'float';
}
}
}
例如,通过使用这些值3.00和3.99,我们获得了这些“个人资料”,可用于识别数字(类似于指纹):
(需要对更多的数字类型进行附加测试(我只用笔和纸测试了这两个数字),但我认为这可行)
isFloat(3.00){
ceil is false
floor is true
round is true
}
isFloat(3.99){
ceil is false
floor is false
round is false
}
答案 3 :(得分:0)
我想我已经找到了一个更简单且更有效的解决方案:
使用Number.prototype.toFixed()函数。
“锁定”数字,因此JavaScript不允许四舍五入为小于nr的数字。您在括号中指定的小数位数。
let int = 1
let float = 1.0;
console.log( "WARNING: toFixed() returns a: ", typeof float.toFixed(2) ); // string
console.log( "NOTICE: float is still a: ", typeof float ) // float
console.log( int === float , "<--- that is an incorrect result");
console.log( int.toString() === float.toFixed(1) ) // correct result here
console.log( int.toString() == float.toFixed(1) )
console.log( int.toString())
console.log( float.toFixed(1))
// You can "lock" the float variable like this:
float = float.toFixed(1);
// but now float is a: string
console.log( 'NOTICE: the "locked" float is now a: ', typeof float )
console.log( "and that will crash any future atempts to use toFixed() bacause that function does not exist on strings, only on numbers.");
console.log( "Expected crash here: " )
float.toFixed(1)
答案 4 :(得分:0)
一个简单的解决方案: 检查除数和整数形式的余数是否为0。
if(x % parseInt(x) == 0)
return 'integer';
else return 'float';