Javascript 在控制台的浏览器编号中,除法返回NaN 设cat1=0 设Catego1=0 cat1=(cat1*100)/CATGO1 {数学地板(cat1)}%
在这段代码中,我在浏览器中得到了一个NaN%,如果我键入它,则类型号为0。现在我指出,只要我将(cat1*100)除以0,就会发生这种情况,js在类型方面非常棘手。 注意:我碰巧在其他页面上有相同的代码(被迫复制),这只发生在5个页面中的一个页面上 到目前为止,我已经尝试了ParseInt、Parsefloat、Number,并使用了数学库,但我还远远没有解决它Javascript 在控制台的浏览器编号中,除法返回NaN 设cat1=0 设Catego1=0 cat1=(cat1*100)/CATGO1 {数学地板(cat1)}%,javascript,logic,logical-operators,Javascript,Logic,Logical Operators,在这段代码中,我在浏览器中得到了一个NaN%,如果我键入它,则类型号为0。现在我指出,只要我将(cat1*100)除以0,就会发生这种情况,js在类型方面非常棘手。 注意:我碰巧在其他页面上有相同的代码(被迫复制),这只发生在5个页面中的一个页面上 到目前为止,我已经尝试了ParseInt、Parsefloat、Number,并使用了数学库,但我还远远没有解决它 谢谢大家! 因为你正在用0除以未定义的0。(NaN)不完全清楚你想实现什么,但很清楚你被“类型号”搞糊涂了 值NaN,尽管它的字面意思
谢谢大家! 因为你正在用0除以未定义的0。(NaN)不完全清楚你想实现什么,但很清楚你被“类型号”搞糊涂了 值NaN,尽管它的字面意思是“不是数字”,实际上是JavaScript中数字类型可以接受的值。JavaScript的核心只有几个“类型”。不同于C++,其中有int、浮点、长等——JavaScript只是:
- 未定义
- 数
- 串
- 反对
- 排列
- 作用
varx=2/4代码>将设置x==“数字”和x==0.5的类型
在本例中,您对两种“数字”类型(零和零)执行了数学运算(除法),因此输出必须是数字:
let cat1 = 0
let Catego1 = 0
cat1 = (cat1 * 100) / Catego1
<td>{Math.floor(cat1)} %</td>
但是这个数字的值是多少?被零除是不可能的,所以返回“不是数字”——因为它的值是荒谬的
如果您在任何地方看到该值为“0”,这是因为您有一些库或函数正在将输出转换为字符串,并且不理解NaN
,返回“0”(可能是您正在使用的任何模板系统中的错误)。考虑下面这样的事情:
var x = 0 / 0;
console.log(typeof x); // "number"
此代码看起来像是将输出值钳制为正数。如果x
大于0,则输出它。如果不是(小于零),则输出0。但是如果x
是NaN
?在JavaScript中,使用NaN
值的所有比较(不等于)都将始终返回false:
console.log(x > 0 ? x : 0);
x>0;//假的
x<0;//假的
x==0;//假的
x!==0; // 真的
因此,我们最终为NaN
输出0 你在除以0。(让Catego1=0
)0/0是非线性的,实际上是NaN,为什么你要除以0,你希望从中得到什么?零项合计的百分比是一个无意义的操作。最接近的“合理”值为零(从无到有),或100%(从无到有)。但即便如此,从一开始就试图从零中提取百分比的做法也不太明智。因此,我将重点放在应该发生的事情上,而不是这个。如果条件对所有问题的回答都错了,那么根据评分公式,百分比应该是0,不是吗?如果我认为你的话是理所当然的,那么这意味着在浏览器中不可能返回0作为整数,这是不符合逻辑的,ps:console.log显示0类型的数字您可以返回0。这不是问题所在。你不能除以0。这不是一个浏览器的东西,这是一个数学的东西。如何将一组事物划分为0组?你不能。即使这样编码也不起作用:Math.floor(cat1)==0?“0”:Math.floor(cat1),但正如您所解释的,除了找到破坏输出的原因之外,没有其他出路。基于pastebin,我是对的吗@EagleMind现在在pastebin上看到了您的代码,我可以看到问题的原因以及您试图实现的目标。您有一些类别没有问题或答案-意思是CategoX
为0(因此除以0)。在输出代码中,您应该使用isNaN()
在除法之后显式地检查NaN
,或者您应该说类似Catego1==0?“N/A”:cat1
-这将明确检查NaN
值的原因,并允许您提供自定义输出,解释为什么不可能使用实际值
x > 0; // false
x < 0; // false
x === 0; // false
x !== 0; // true