Javascript 如何将数字2.00作为完整字符串输出?

Javascript 如何将数字2.00作为完整字符串输出?,javascript,floating-point,Javascript,Floating Point,在此之前,我想说声对不起。但这不是重复。其他帖子上的任何答案都有同样的问题。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 t

在此之前,我想说声对不起。但这不是重复。其他帖子上的任何答案都有同样的问题。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”

感谢您的回答

您可以使用



还要注意
2===2.00
但是
2!==“2.00”

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

i.toPrecision(3)
这将显示2个十进制数字


另外,NULL的解决方案也做得很好,不需要计算精确的精度。i、 e.
.toFixed(小数)
是你最好的朋友

你不能完全做你想做的事

2.00在JavaScript中转换为数字2,不带小数点。如果需要,可以使用.toFixed(2)将其添加回,如上所示。

回答修订: 在javascript中,绝对没有办法区分
2
2.0
2.000
。因此,如果不提供一些额外的小数位,您将永远不会,能够从
var a=2.00
中检测到2在被分配后不是整数(根据您的方法)

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

typeof parseInt('2.00', 10) == typeof parseFloat('2.00')
                   'number' == 'number'
                        /* true */
原始答复: JavaScript没有基于硬的标量类型,只是一个简单的标量类型。出于这个原因,并且因为您实际上只有一个有效数字,JavaScript将您的
2.00
设置为一个“整数”(因此不存在小数点)。对于JavaScript:
2=2.0=2.00=2.00000

举个例子,如果我给你这个数字
12.000000000000
,让你记住它并在一周后交给别人,你会花时间记住有多少个零,还是专注于我给你这个数字
12
?(
12
12个小数位要少得多的记忆工作

至于
int
vs
float
/
double
/
real
,您实际上只是从您的角度描述了数字的类型,而不是JavaScript。可以将JavaScript中的一个数字称为
int
作为一个标签,而不是定义。概述:

Value:     To JavaScript:    To Us:
------     --------------    ------
1          Number            integer
1.00       Number            decimal
1.23       Number            decimal
无论我们将其分类为什么,JavaScript仍然只将其视为一个
数字

如果你需要保留小数位,这将是你最好的选择

例如:

// 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前面加上
'+
与调用
.toString()
是一样的,它只是简写而已。如果我使用了
a.toString()
b.toString()

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

可能重复的
2.00===2;//如果您想要2.d.p.,则为true。请参阅答案,如果您想要在文本中键入的小数位数,JavaScript不在乎,它将以数字形式删除零,2.00==2。JS怎么知道你想要的是看起来毫无用处的0,而你却不明确地告诉它?javascript中只有一种类型的数字:IEEE 754双精度浮点@NULL有正确的答案。@SlametBedjo:Simplist答案:不能在javascript的范围内。无法区分
2
2.0
2.00
甚至
2.0000000000000
。toFixed(2)
将数字
i
转换为一个字符串,告诉您需要两个十进制数points@SlametBedjo.toFixed(2)将返回一个字符串。谢谢:)。是的,只有一个号码。但是情况是,我们希望将2.00检测为浮点,而不是整数。我们创建函数isInt,但是,2.00 true为int,而不是float@SlametBedjo请阅读JavaScript(),正如其他人提到的,JavaScript中没有int或float。只有数字。要检测一个数字是否有小数点,请选中此处:@SlametBedjo这不是JavaScript的工作方式,因为一个数字同时包含整数和浮点数,所有剩余的零将从一个数字中删除
0.01==0.010==0.01000000000
。您无法检测数字是如何初始化的,例如
var i=2.00
@powerplace
。toPrecision
将返回一个长度=(length+dec float)为数字
(12.34)的字符串。toPrecision(3)==“12.3”
进一步,它将进入
e
符号
1234..toPrecision(3);/1.23e+3
Javascript只有一种数字数据类型,即数字。toFixed仅将其转换为具有所需小数位数的字符串。我并不是说它具有
float
v
decimal
vs
real
vs
int
;只是没有硬设置的数据类型。同样,你是对的:它会产生一个小数位数固定的字符串。谢谢你的回答。情况为2.00时,应检测为浮动。每次发帖创建isInt()时,2.00始终
true
为整数,而不是float@SlametBedjo:正如Rob所提到的,javascript中没有
int
,只是一个
数字(
int
与其说是标量类型,不如说是一种确定)。JavaScript只存储它需要存储的内容(由于提供的两个小数位在说明数字
2
方面没有任何意义,它会丢弃它们)。@BradChristie我的错误,我误解了你所说的“硬基”的意思。Javascript的变量是
Value:     To JavaScript:    To Us:
------     --------------    ------
1          Number            integer
1.00       Number            decimal
1.23       Number            decimal
// 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