Целое число MySQL неподписанные арифметические проблемы?

Много приложений требуют, чтобы был только один экземпляр некоторого класса, таким образом, шаблон наличия только одного экземпляра класса полезен. Но существуют изменения к тому, как шаблон , реализовал .

существует статический одиночный элемент , в который силы класса, что может только быть один экземпляр класса для каждого процесса (в Java на самом деле один на ClassLoder). Другая опция к [1 110], создают только один экземпляр .

Статические одиночные элементы зло - один вид глобальных переменных. Они делают тестирование тяжелее, потому что не возможно выполнить тесты в полной изоляции. Вы нуждаетесь в сложной установке и разъединяете код для очистки системы между каждым тестом, и очень легко забыть чистить некоторое глобальное состояние правильно, которое в свою очередь может привести к неуказанному поведению в тестах.

Создание только одного экземпляра хорошо . Вы просто создаете один экземпляр, когда программы запускаются, и затем передайте указатель на тот экземпляр ко всем другим объектам, которым нужен он. Платформы внедрения зависимости делают это легким - Вы просто настраиваете объем объекта, и платформа DI будет заботиться о создании экземпляра и передаче его всем, кому нужен он. Например, в Guice Вы аннотировали бы класс @Singleton, и платформа DI создаст только один экземпляр класса (на приложение - у Вас может быть несколько приложений, работающих в той же JVM). Это делает тестирование легким, потому что можно создать новый экземпляр класса для каждого теста и позволить сборщику "мусора" уничтожить экземпляр, когда это больше не используется. Никакое глобальное состояние не протечет от одного теста до другого.

Для получения дополнительной информации: Чистые Переговоры по Коду - "Глобальное состояние и Одиночные элементы"

5
задан Jé Queue 14 November 2009 в 06:16
поделиться

3 ответа

Если левая или правая часть оператора вычитания беззнаковая, результат тоже беззнаковый. Вы можете изменить это, установив NO_UNSIGNED_SUBTRACTION режим SQL .

Кроме того, вы также можете явно преобразовать свои беззнаковые значения в значения bigint со знаком, а затем выполнить вычитание.

7
ответ дан 13 December 2019 в 05:37
поделиться

Ага, промежуточное вычитание выполнило 64-битный цикл. Поскольку вы ожидали 32-битные целые числа, но на самом деле получили 64, нет причин использовать беззнаковые числа.

2
ответ дан 13 December 2019 в 05:37
поделиться

попробуйте следующее:

mysql> select cast(cast(a-b as unsigned) as signed)/c from tt;

+-----------------------------------------+
| cast(cast(a-b as unsigned) as signed)/c |
+-----------------------------------------+
|                       -659.771639688953 | 
+-----------------------------------------+
1 row in set (0.00 sec)

ссылка: http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html

3
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: