Когда я вставляю DOUBLE
, почему я вижу значение, подобное 9.755046187483832e17
, когда я выбираю это значение? Как я могу получить номер, например 975504618748383289
?Отключить научную нотацию MySQL
ответ
Вы, вероятно, ищете FORMAT
или ROUND
функции:
FORMAT()
Использование, в зависимости от вашего местности и ваших конкретных потребностей, вы, возможно, придется заменить тысячи сепаратор:
mysql> SELECT FORMAT(9.755046187483832e17,0);
975,504,618,748,383,200
mysql> SELECT REPLACE(FORMAT(9.755046187483832e17,0), ',','');
975504618748383200
С другой стороны, ROUND()
является цифровым функцией, он выводит только цифр:
mysql> SELECT ROUND(9.755046187483832e17,0);
975504618748383200
См http://sqlfiddle.com/#!2/d41d8/17614 для игры с этим.
EDIT: Как вы заметили, последние две цифры округлены до . Это из-за пределов точности DOUBLE
. Вы должны помнить, что double являются приблизительно. Если вам нужны точные значения и/или больше цифр, чем доступно с 16-битной точностью двойного действия, вам, вероятно, необходимо изменить тип столбца на DECIMAL
. По умолчанию DECIMAL
имеет 10 цифр точности (10 base 10 цифр). Вы можете явно запросить до 65 цифр.
Например, если вам нужно до точности 20 цифр, вы пишете что-то вроде этого:
CREATE TABLE tbl (myValue DECIMAL(20), ...
Посмотреть http://dev.mysql.com/doc/refman/5.6/en/fixed-point-types.html
Пожалуйста, обратите внимание, однако, чем вещи не что просто. Выбор десятичного столбца может бесшумно преобразовать его в double (или bigint?), Тем самым теряя дополнительную точность. Возможно, вам придется явно указать строку, чтобы сохранить полную точность. Это означает, что вам, возможно, придется иметь дело с этим на уровне приложений.
create table tbl (dblValue DOUBLE, decValue DECIMAL(20,0));
insert into tbl values (975504618748383289, 975504618748383289);
SELECT dblValue, decValue FROM tbl;
--> DBLVALUE DECVALUE
--> 975504618748383200 975504618748383200
SELECT CAST(dblValue AS CHAR), CAST(decValue AS CHAR) FROM tbl;
--> CAST(DBLVALUE AS CHAR) CAST(DECVALUE AS CHAR)
--> 9.755046187483832e17 975504618748383289
Для примера см. http://sqlfiddle.com/#!2/d5f58/2.
Спасибо, но это устанавливает последние две цифры в 0. Мне нужны значения десятков и единиц. –
@RosePerrone Там _is_ нет значения для десятков и единиц. По крайней мере, в примере Сильвена. Вы можете получить некоторые другие результаты, но имейте в виду, что [double имеет только около 16 десятичных цифр точности] (http://en.wikipedia.org/wiki/Double-precision_floating-point_format). – Carsten
@RosePerrone Я в значительной степени отредактировал свой ответ в отношении потери точности. –
Двойник имеет точность около 16 цифр. Если вам нужна более высокая точность, у вас есть два варианта.
Если значение является целым числом, вы можете использовать bigint
примерно до 19 цифр точности.
Лучше decimal
, который поддерживает до 65 цифр. Например, следующее возвращает ошибку:
select format(v*v*v*v*v*v*v*v, 0)
from (select 1001 as v) t
Поскольку значение v
трактуется как bigint
.
Однако следующие работы очень красиво:
select format(v*v*v*v*v*v*v*v, 0)
from (select cast(1001 as decimal(65, 0)) as v) t
Возвращающиеся 1,008,028,056,070,056,028,008,001
- который является точным ответом.
Если вам нужна точность до 65 мест, используйте decimal
. Кроме того, вам, возможно, придется писать свои собственные подпрограммы. Если вы не выполняете арифметику в поле, тогда подумайте о ее сохранении в виде строки.
- 1. Отключить научную нотацию в Gnuplot
- 2. SQLite, как отключить научную нотацию
- 3. Отключить научную нотацию при преобразовании в JSON
- 4. Java - Отключить научную нотацию в ячейках JTable
- 5. PyQt - как отключить научную нотацию в QLabel
- 6. Отключить научную нотацию перед записью в файл
- 7. Отключить научную нотацию в python json.dumps output
- 8. readr: Отключить научную нотацию в write_csv
- 9. Отключить научную нотацию в MySQL-клиенте командной строки?
- 10. Прочитать научную нотацию scanf
- 11. Отключить научную нотацию и смещение во всем мире
- 12. Как отключить научную нотацию при работе с Perl и Excel
- 13. Как напечатать десятичную нотацию, а не научную нотацию в Python?
- 14. MYSQL для PHPExcel является преобразование чисел в научную нотацию
- 15. BC математическая строка в научную нотацию
- 16. Как получить научную нотацию в текстовом поле?
- 17. Почему sprintf ('% i', x) показывает научную нотацию?
- 18. Как заставить научную нотацию по вертикальной оси?
- 19. Как предотвратить научную нотацию в R?
- 20. Как удалить научную нотацию из double
- 21. Как подавить научную нотацию в выводе свиньи
- 22. Предотвратите научную нотацию с NSDecimalNumber как NSString
- 23. Matplotlib: удалить научную нотацию в подзаголовке
- 24. Как написать научную нотацию в perl?
- 25. Использовать научную нотацию только при необходимости
- 26. BigDecimal имеет научную нотацию в мыльном сообщении
- 27. gnuplot преобразование времени в научную нотацию
- 28. Назначить научную нотацию переменной в Python
- 29. Предотвратите научную нотацию в морском ящике
- 30. Почему printf не использует научную нотацию?
Одним большим преимуществом научной нотации является то, что она справедливо представляет точность, доступную в значении. Если показатель экспоненты был '30' (' 1.23e30'), то обозначение с фиксированной точкой генерирует приблизительно 14 случайных цифр. – wallyk