Я понимаю, что float - это приближение, которое зависит от точности, которую вы хотите. Однако я не совсем понимаю, почему он конвертирует 6.099999904632568
в 6.1
. Почему нужно округлять его, а не останавливаться с максимальной точностью (т. Е. 6.09999990
)
В любом случае, я могу заставить число храниться с максимальной точностью без округления?
Таблица информации
CREATE TABLE `urls` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`gcloud_magnitude` float DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1193 DEFAULT CHARSET=utf8;
Код для воспроизведения
mysql> INSERT INTO urls (url_md5, gcloud_magnitude, created_at, updated_at) VALUES ('noop', 6.099999904632568, '2018-09-16 14:57:49', '2018-09-16 14:57:49');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM urls WHERE url_md5 = 'noop'\G;
id: 1193
url_md5: noop
gcloud_magnitude: 6.1
1 row in set (0.00 sec)
интерпретатор Ruby разбирает как float
irb(main):004:0> Url.find_by(url_md5: 'noop').gcloud_magnitude.to_f
=> 6.1