Javascript 在控制台的浏览器编号中,除法返回NaN 设cat1=0 设Catego1=0 cat1=(cat1*100)/CATGO1 {数学地板(cat1)}%

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,尽管它的字面意思

在这段代码中,我在浏览器中得到了一个NaN%,如果我键入它,则类型号为0。现在我指出,只要我将(cat1*100)除以0,就会发生这种情况,js在类型方面非常棘手。 注意:我碰巧在其他页面上有相同的代码(被迫复制),这只发生在5个页面中的一个页面上

到目前为止,我已经尝试了ParseInt、Parsefloat、Number,并使用了数学库,但我还远远没有解决它
谢谢大家!

因为你正在用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