GWT подписал ноль

В Java я могу различать 0D и -0D:

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

Но, похоже, это больше не работает после того, как GWT транспилировал мою Java в JavaScript. Я даже получаю false в режиме разработки GWT, но true в суперрежиме разработки GWT.

Я прочитал, что в JavaScript

0.0 === -0.0 // true

но

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

Как я могу заставить GWT использовать сравнение Object.is? Или есть ли другое решение, чтобы проверить, получил ли я отрицательный или положительный ноль?


person Sebastian    schedule 10.02.2017    source источник


Ответы (2)


Вы можете объявить новый метод, используя JSNI, который использует Object.is:

public static native boolean compareDoubles(Double a, Double b) /*-{
    return Object.is(a, b);
}-*/;
person Stik    schedule 10.02.2017
comment
+1 Кажется, это работает, но когда я использую Object.is в GwtTestCase, я получаю com.google.gwt.core.client.JavaScriptException: (null) - person Sebastian; 10.02.2017
comment
Хм, возможно, он не будет вести себя так же в размещенном браузере HtmlUnit. Я, конечно, видел случаи, когда поведение отличалось. На данный момент я не настроил свою среду для исследования, но я постараюсь посмотреть сегодня вечером. - person Stik; 10.02.2017

ОК, после еще нескольких исследований я нашел решение с использованием JSNI:

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

Поскольку 1/-0 производит -Infinity в JavaScript, это работает.

person Sebastian    schedule 10.02.2017