Javascript 比较两个浮动以查看它们是否';你都是负数,还是都是正数

Javascript 比较两个浮动以查看它们是否';你都是负数,还是都是正数,javascript,floating-point,compare,Javascript,Floating Point,Compare,伙计们,我有两个浮子,都来自输入框 我需要比较这两个浮点数,如果一个是负数,一个是正数,就会抛出一个错误。如果它们都是正的,或者都是负的,那就好了 有什么想法吗 谢谢将它们相乘 如果答案是肯定的,那么它们都是相同的符号 如果答案是否定的,那么它们是相反的符号 如果答案为零(在考虑舍入误差的某个值内),那么其中一个或两个都为零,您必须单独检查它们。然后,您必须决定在您的场景中将0视为正还是负。只需执行以下操作: if float1*float2<0 Error 如果float1*f

伙计们,我有两个浮子,都来自输入框

我需要比较这两个浮点数,如果一个是负数,一个是正数,就会抛出一个错误。如果它们都是正的,或者都是负的,那就好了

有什么想法吗


谢谢

将它们相乘

如果答案是肯定的,那么它们都是相同的符号

如果答案是否定的,那么它们是相反的符号


如果答案为零(在考虑舍入误差的某个值内),那么其中一个或两个都为零,您必须单独检查它们。然后,您必须决定在您的场景中将0视为正还是负。

只需执行以下操作:

if float1*float2<0
    Error

如果float1*float2虽然可以检测产品的标志,但这不是您感兴趣的。特别是如果你打算在大量的浮动上使用它(例如检测时间流中的过零)

最简单的方法是准确地表达你的要求:a的符号等于b的符号吗

function samesign( a, b ) {
  var aPositive = a >= 0;
  var bPositive = b >= 0;
  return aPositive == bPositive;
}
或更短:

function samesign( a, b ) { return (a>=0) == (b>=0); }

如果一个(或两个)为零会怎样?我自己再看一次,OPs规则是不明确的,因为零既不是+ve也不是-ve。@dotty是的,它会起作用,并且是一个简洁的解决方案,除非一个或另一个值为零。当只有一个值为零时,你的规则怎么说?@dotty-如果它们都为零,那么答案将为零(实际上在零的舍入误差范围内,但这是另一回事)。在任何情况下,零结果都意味着您必须单独检查每个输入,看看它是正的还是负的。不确定,如果值是0和-3,还是0和+3,它会通过吗?既然我们讨论的是IEEE标准浮点,那么+0和-0是两个独立的数字。。。虽然我不确定如果不进行类型puning并将它们作为int进行比较,如何检测它们(这有一个潜在的问题,因为有些疯狂的平台对int和float使用不同的字节顺序…)+1比乘法更好的解决方案。正如每个人在其他答案中所指出的那样,清晰地编写代码而不使用技巧是很重要的。除非你还有其他的顾虑,比如优化
function samesign( a, b ) { return (a>=0) == (b>=0); }