2

在此之前,我想说声对不起。但这不是重复的。其他帖子的任何答案都有同样的问题。JS 中没有浮点数或整数(只有数字)。当你制作isInt()函数时,2.00 总是被检测true为整数。我希望将 2.00 检测为浮点数。所以,我必须先把它串起来。

function isInt(i) {
    if ( i.toFixed ) {
        if ( i % 1 === 0 ) {
            return true; // the problem is 2.00 always detected true as integer. 
            // i want 2.00 detected as float
        } else {
            return false;
        }
    } else {
        return false;
    }
}

然后我想我会将 2.00 字符串化,然后用 split('.') 拆分它。但是 toString 不这样做

var i = 2.00;
alert(i.toString()); 
// Why this always result 2 . i want the character behind point

那么,该怎么做呢?我想要 2.00 结果 "2.00" ,而不仅仅是 "2"

谢谢你的回答

4

5 回答 5

7

您可以使用Number.toFixed(n);

var i = 2;

alert( i.toFixed(2) ); // "2.00"

var i = 1.2345;

alert( i.toFixed(2) ); // "1.23"

另请注意,2 === 2.00但是2 !== "2.00".

于 2013-08-08T12:43:56.987 回答
2

修改答案:

在 javascript 中,绝对没有办法区分2 2.02.000。因此,如果没有提供一些额外的小数位,您将永远var a = 2.00无法从2 中检测到integer它被分配后除了(根据您的方法)之外的任何东西。

举个例子,尽管 [误导] 内置方法:

typeof parseInt('2.00', 10) == typeof parseFloat('2.00')
                   'number' == 'number'
                        /* true */

原答案:

JavaScript 没有基于硬的标量类型,只是简单的Number. 出于这个原因,并且因为您实际上只有 1 个有效数字,所以 JavaScript 正在使用您2.00并将其设为“整数”[松散地使用](因此不存在小数位)。到 JavaScript:)2 = 2.0 = 2.00 = 2.00000

举个例子,如果我给你这个号码12.000000000000并让你记住它并在一周后把它交给某人,你会花时间记住有多少个零,还是专注于我把号码交给你的事实12?(twelve记住比记住要少得多twelve with as many decimal places

至于intvs float/ double/ real,您实际上只是从您的角度描述数字的类型,而不是 JavaScript 的。将 JavaScript 中的数字调用int视为给它一个标签而不是一个定义。概述:

Value:     To JavaScript:    To Us:
------     --------------    ------
1          Number            integer
1.00       Number            decimal
1.23       Number            decimal

无论我们将其归类为什么,JavaScript 仍然只将其视为Number.

如果您需要保留小数位,Number.toFixed(n)这将是您最好的选择。

例如:

// only 1 sig-fig
var a = 2.00;
console.log(''+a);             // 2
console.log(a.toFixed(2));     // 2.00

// 3 sig-figs
var b = 2.01
console.log(''+b);            // 2.01
console.log(b.toFixed(2));    // 2.01

顺便说一句,为 var 添加前缀与''+调用 a 相同.toString(),只是简写。如果我使用a.toString()b.toString()

于 2013-08-08T12:50:13.823 回答
0

要字符串化(Chrome 至少会这样做),请使用以下命令:

i.toPrecision(3)

这将显示 2 个十进制数字。

NULL 的解决方案也做得很好,无需计算精确的精度。即.toFixed(decimals)是你最好的朋友

于 2013-08-08T12:46:57.393 回答
0

你不能完全做你想做的事。

2.00 在 JavaScript 中被转换为数字 2,没有小数点。如果您想使用 .toFixed(2) 将其重新添加,如上所示。

于 2013-08-08T12:48:28.540 回答
0

我建议将“2.00”保留为字符串,并在必要时将其解析为数字以进行算术运算。这样您就可以区分数字 2 是输入为“2”、“2.00”还是“2.000000”。如果要保留原始小数位数,请输出字符串,而不是数字。

于 2013-08-08T14:11:05.867 回答