如何在JavaScript中区分一个十进制浮点和整数

如何在JavaScript中区分一个十进制浮点和整数,javascript,types,floating-point,integer,decimal,Javascript,Types,Floating Point,Integer,Decimal,我使用一个函数来验证在JavaScript中作为参数传递的数字是浮点数还是整数。 该方法适用于“4.34”等数字,即十进制数为非零的数字,但对“3.0”等数字无效,返回整数而不是浮点。 这就是我到目前为止能想到的代码 function dataType(x) { if (typeof x === 'number' && ){ if (Math.round(x) === x ){ return 'integer'; }

我使用一个函数来验证在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(数据类型(3.0))
返回浮点数。

JS中的每个数字都是浮点数。 JS中只有一种数字类型(
number

因此,没有跨浏览器的方式来保证:

3
3.0
3.0000000000000
等等

即使在现代浏览器中,
(3.0000).toString()=“3”//正确

试图在JS中强制转换或强制执行数字类型安全性是毫无意义的。

使用数字格式处理数字,根据需要使用所需的精度将其转换为字符串或从字符串中转换出来。

JS中的每个数字都是一个浮点数。 JS中只有一种数字类型(
number

因此,没有跨浏览器的方式来保证:

3
3.0
3.0000000000000
等等

即使在现代浏览器中,
(3.0000).toString()=“3”//正确

试图在JS中强制转换或强制执行数字类型安全性是毫无意义的。

使用数字格式处理数字,根据需要使用所需的精度将其转换为字符串或从字符串中转换出来。

我认为这是不可能的,除非您在值变为数字之前可以访问该值的字符串表示形式。JavaScript会丢弃这些信息


你想解决什么样的问题来保证这种区分?

我认为这是不可能的,除非你在值变成数字之前能够访问它的字符串表示形式。JavaScript会丢弃这些信息

你想解决什么问题来保证这种区别?

试试这个

function dataType(x) {
    if (typeof x === 'number' ){
        if (Math.round(x) === x && x.toString().indexOf('.') < -1 ){
            return 'integer';
        }
        return 'float';
    }
}
函数数据类型(x){
如果(x的类型=='number'){
if(Math.round(x)==x&&x.toString().indexOf('.')<-1){
返回“整数”;
}
返回“浮动”;
}
}
试试这个

function dataType(x) {
    if (typeof x === 'number' ){
        if (Math.round(x) === x && x.toString().indexOf('.') < -1 ){
            return 'integer';
        }
        return 'float';
    }
}
函数数据类型(x){
如果(x的类型=='number'){
if(Math.round(x)==x&&x.toString().indexOf('.')<-1){
返回“整数”;
}
返回“浮动”;
}
}

如果您更改输入,并比较更改所做的操作,可能会发生什么

沿着这条路线,(它当然可以以某种方式简化)例如:

函数isFloat(x){//示例:x=3.00或x=3.99
如果(x的类型=='number'){
var obj={};
obj.ceil=false;
obj.floor=false;
obj.round=false;
如果(数学单元(x+0.1)==x){
obj.ceil=true;
}
如果(数学楼层(x+0.1)==x){
obj.floor=true;
}
如果(数学四舍五入(x)==x){
obj.round=true;
}
如果(obj.round==true){//或使用obj.floor?
返回“整数”;
}
如果((obj.floor==true)和(&&(obj.round==true)){//或者&&或者| |不确定
返回“浮动”;
}
}

}
如果您更改输入,并比较更改所做的操作,可能会发生什么

沿着这条路线,(它当然可以以某种方式简化)例如:

函数isFloat(x){//示例:x=3.00或x=3.99
如果(x的类型=='number'){
var obj={};
obj.ceil=false;
obj.floor=false;
obj.round=false;
如果(数学单元(x+0.1)==x){
obj.ceil=true;
}
如果(数学楼层(x+0.1)==x){
obj.floor=true;
}
如果(数学四舍五入(x)==x){
obj.round=true;
}
如果(obj.round==true){//或使用obj.floor?
返回“整数”;
}
如果((obj.floor==true)和(&&(obj.round==true)){//或者&&或者| |不确定
返回“浮动”;
}
}

}
我想我找到了一个更简单有效的解决方案:

使用该函数

“锁定”该数字,因此JavaScript不允许对该数字进行四舍五入,以小于括号中指定的小数位数

设int=1
让float=1.0;
log(“警告:toFixed()返回:”,typeof float.toFixed(2));//一串
log(“注意:float仍然是:”,typeof float)//float

log(int==float,“我想我找到了一个更简单、更有效的解决方案:

使用该函数

“锁定”该数字,因此JavaScript不允许对该数字进行四舍五入,以小于括号中指定的小数位数

设int=1
让float=1.0;
log(“警告:toFixed()返回:”,typeof float.toFixed(2));//字符串
log(“注意:float仍然是:”,typeof float)//float
log(int==float,“一个简单的解决方案:
检查数字与其整数版本的除法余数是否为0

if(x % parseInt(x) == 0) 
     return 'integer';
 else return 'float';
一个简单的解决方案: 检查数字与其整数版本的除法余数是否为0

if(x % parseInt(x) == 0) 
     return 'integer';
 else return 'float';

这是课堂上提出的一个问题。我只是想知道是否有可能做到这一点。这是课堂上提出的一个问题。我只是想知道是否有可能做到这一点。不幸的是,这不起作用,因为
x.toString()
将不会保留
.0
Gotcha!似乎不可能真正做到。不幸的是,这不起作用,因为
x.toString()
不会保留一个
.0
Gotcha!似乎不太可能。不!不幸的是,如果:int=1.0,它仍然会报告它们不同,因为toString()将其四舍五入为1,而toFixed()根本不会四舍五入。toFixed()还添加了“required”如果一个数字太短,尾随的零的数量会使字符串彼此不同&因此将其报告为false。不!这是