двойное значение 0.0001 будет преобразовано в 1.0E-4 при вставке в базу данных

Я хотел бы передать двойное значение, полученное с веб-страницы, в базу данных sqlServer. значение завернуто в объект значения.

public class testVO{
    Double value;

    public Double getValue() {
        return value;
    }

    public void setValue(Double value) {
        this.value = value;
    }

}

Однако проблема, с которой я столкнулся, заключается в том, что когда значение меньше 0,0001, оно будет переведено в 1,0E-4 или другое научное представление, что вызывает ошибку базы данных.

Я нашел способ использовать BigDecimal.valueOf(testVO.getValue()) для его анализа.

Есть ли другой лучший способ решить эту проблему?


Решено: проблема не в экспоненциальном представлении, база данных может читать как числа, так и экспоненциальные. Проблема в том, что пакет утилит, который я использовал при анализе его в базе данных, преобразует все значения в строковый тип, надеясь, что вы не тратите свое время!


person Will    schedule 30.07.2014    source источник
comment
Между 0,0001 и 1,0e-4 нет никакой разницы. Как вы поместите его в базу данных?   -  person Gabe    schedule 30.07.2014
comment
Бьюсь об заклад, он преобразовал его в строку.   -  person Alberto Bonsanto    schedule 30.07.2014
comment
О, кажется, я понял! sqlServer может читать как 0.0001, так и 1.0e-4, я мог ошибиться при разборе его в строку sql. спасибо!   -  person Will    schedule 30.07.2014


Ответы (1)


Двойное умножение может дать неожиданный результат. Проверьте код ниже.

    double a = 0.3;
    double b = 0.1 + 0.1 + 0.1;
    if(a == b) {
        System.out.println("Equal");
    } else {
        System.out.println("Not Equal");
    }

Результат будет Not Equal. Как сказал Alberto Bonsanto, используйте String для сохранения в базе данных. Я использую BigDecimal для процесса расчета и сохраняю его как строку и (числовое значение для sqlserver) в базе данных.

person Zaw Than oo    schedule 30.07.2014
comment
Спасибо! кстати, не могли бы вы подробнее объяснить, как сохранить его как строку и числовое значение для sqlserver в базе данных. Вы имеете в виду, что сохраняете числовой тип в sqlSever и строку в другой базе данных? и почему? - person Will; 30.07.2014
comment
@Will, когда я использую sqlserver, я использую numeric. Это нормально для меня. Другая база данных, я ее еще не использовал. Я думаю, может быть тип данных, например numeric. Например number. Если вы используете String, все в порядке. возможно, потребуется программно преобразовать визовую визу String в визу Number. - person Zaw Than oo; 30.07.2014