我对" .toFixed()。长度有疑问。我在这里有一个if语句:if(num.toFixed(2)。length> 4){"。我不明白结果的结果。
我知道它会计算字符串的长度。因为toFixed将数字转换为字符串。但我没有得到结果。我希望你有一个ans,因为我无法在互联网上找到它或我的老师广告学校不知道它以太。 谢谢你的时间,[FireDAC][DatS]-2. Object [id] is not found
答案 0 :(得分:1)
您在问题中描述的内容基本上是toFixed()
的预期行为。
它总是将传递的数字四舍五入为两位小数,并将其转换为始终显示这两位小数的字符串,即使它们为0。
您可以尝试多个more results in this small sample on ideone。
回到最初的问题:
if (num.toFixed(2).length > 4)
此表达式可以转换为"字符串表示形式超过4个字符"。
由于我们已经提到了两位小数和小数点始终存在,所有字符串结果都将以.##
结尾(其中#
可以是任何数字)。这是一个3个字符的字符串长度。
这实质上意味着此语句在小数点之前必须至少再有两个字符才能成为现实:
#.##
将是4个字符,但仍然无法满足条件。
' ## ##'作品。这些是5个字符,绝对长于4个。
所以这意味着任何等于或大于10的数字都会满足这个陈述。考虑到涉及到的舍入,任何大于9.95
的数字都应该适用于此。
那么为什么不写if (num > 9.95)
?仅仅因为这只是答案的一部分。
也有负数。如果您评估Number(-1).toFixed(2)
,您将获得字符串-1.00
,这已经是5个字符了!
但是四舍五入呢?在这里它变得更有趣。如果您运行Number(-.01).toFixed(2)
,则可以假设它已四舍五入为0.00
。这有点真实,但JavaScript将保留否定前缀,从而产生-0.00
。这又是一个包含5个字符的字符串!
因此,结合这两个观察,我们可以说在if()
子句中的表达式在以下两种情况下都是正确的:
因此,可以用以下术语替换相当神秘/复杂的表达式,并获得相同的结果:
if (num < 0 || num >= 9.5)
答案 1 :(得分:-1)
Sub ArrayUpdateLoop()
'
' ArrayUpdateLoop Macro
'
Range("D530:O530").Select
For i = 1 To 500
Range("D530:O530").Select
ActiveCell.Offset(1, 0).Select
Selection.FormulaArray = "=Spreader(Rollouts,R[-503]C:R[-503]C[14])"
Next
End Sub
在这里您想知道字符串的长度,以便为您提供字符串的长度。如果您在1234.567上执行num = 1234.567
>>> 1234.567
num2 = num.toFixed(2).length
>>> 7 // why is this 7??
,则它将保持不变。