Javascript 如何将数字2.00作为完整字符串输出?
在此之前,我想说声对不起。但这不是重复。其他帖子上的任何答案都有同样的问题。JS中没有浮点或整数(仅数字)。当您使用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
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
vsfloat
/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
vdecimal
vsreal
vsint
;只是没有硬设置的数据类型。同样,你是对的:它会产生一个小数位数固定的字符串。谢谢你的回答。情况为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