【问题标题】:GWT signed zeroGWT 签名为零
【发布时间】:2017-02-10 09:26:49
【问题描述】:

在Java中我可以区分0D and -0D

new Double("0").equals(new Double("-0")) // false

但显然,在 GWT 将我的 Java 转换为 JavaScript 之后,这似乎不再起作用了。我什至在 GWT 开发模式下得到false,但在 GWT 超级开发模式下得到true

我在 JavaScript 中有 read

0.0 === -0.0 // true

但是

Object.is(0, -0) // false

如何强制 GWT 使用 Object.is 比较?或者是否有任何其他解决方案可以检查我得到的是负零还是正零?

【问题讨论】:

    标签: javascript java gwt signed


    【解决方案1】:

    您可以使用 JSNI 声明一个使用 Object.is 的新方法:

    public static native boolean compareDoubles(Double a, Double b) /*-{
        return Object.is(a, b);
    }-*/;
    

    【讨论】:

    • +1 这似乎可行,但是当我在 GwtTestCase 中使用Object.is 时,我得到com.google.gwt.core.client.JavaScriptException: (null)
    • 嗯,在托管的HtmlUnit 浏览器下,它的行为可能会有所不同。我当然见过行为不同的情况。目前我还没有设置我的环境来调查,但我今晚会尝试看看
    【解决方案2】:

    好的,经过一番研究,我想出了一个使用 JSNI 的解决方案:

    native boolean isNegative(double value)
    /*-{
        return 1 / value < 0;
    }-*/;
    

    由于 1/-0 在 JavaScript 中生成 -Infinity,这个可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-24
      • 2021-04-01
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      相关资源
      最近更新 更多