Вопрос примера для хранения значения типа FLOAT - PullRequest
2 голосов
/ 10 июля 2020
• 1000

, тогда почему в этом примере округляется это значение от единиц (я имею в виду первое di git слева от десятичной точки).

Спасибо



= ======= редактировать ==================================

Моя книга это MySQL Мураха, и я сожалею, что это была моя вина, на самом деле Эта книга не говорит, что «FLOAT может сохранять до 7 цифр», как я сказал выше,

Думаю, я неправильно понял значение этой цитаты

Тип FLOAT может использоваться для хранения числа с одинарной точностью, которое обеспечивает числа до 7 значащих цифр. - p238 из Мураха MySQL 3-е издание

========================== == добавить результат теста ============

Я только что проверил тип FLOAT и DOUBLE, тот же ввод и другой вывод

FLOAT всегда показывает 0 при последнее число.

DOUBLE сохраняет число.

Мне любопытно, как вы можете видеть, Float не округляет число до 65,00 (вторая строка от '=====' ). Пока не могу понять, почему это произошло .. введите описание изображения здесь

1 Ответ

4 голосов
/ 10 июля 2020

Если в каком-либо источнике информации сказано, что FLOAT может «сохранять до 7 цифр», то это неверно.

Когда используется формат IEEE-754 binary32, число представляется с помощью двоичных цифр , а не десятичные цифры. Нет точного соответствия между десятичными и двоичными цифрами. Точность формата binary32 достаточна, чтобы любое десятичное число six-di git в пределах диапазона можно было преобразовать в binary32, а при обратном преобразовании в десятичное число six-di git результат будет равен. (Здесь десятичное число с шестью ди git означает число с шестью значащими цифрами, например, 123456000, 1,23456 • 10 −13 и т. Д.)

Многие более длинные десятичные дроби числа могут быть преобразованы в binary32 и обратно без изменений, но это зависит от их совпадения с числами, представляемыми в формате.

Для 1234567,89 ближайшим числом, представляемым в формате binary32, является 1234567,875. Это значение, которое должно получиться в результате преобразования в формат binary32. Если было напечатано «1234570», я ожидаю, что это результат округления до шести значащих цифр для отображения, так что истинное значение не отображается. Другая возможность состоит в том, что было использовано менее 24 бит, поддерживаемых в значении binary32.

...