Вот извлеченный код:ява давая .9999999 вместо закругленной целого числа
long timeMs = 1473;
double timeS = (timeMs/1000) + (timeMs% 1000)/1000.0;
System.out.println(timeS);
И выход:
1.4729999999999999
Так в основном, я просто пытался преобразовать время, затрачиваемое в секундах в миллисекундах. После того, как я увидел это, я думал, что мой метод неправильный, поэтому я пробовал другие входы, такие как 1472, 1474, 1173, 3 и т. Д., Которые дали правильные значения (1.472, 1.474, 1.173, 0.003).
Я думаю, что я натолкнулся на нечто похожее на это некоторое время назад в книге под названием Java Puzzlers, но забыл. Может ли кто-нибудь сказать мне, почему это происходит (и правильный термин/ошибка)?
Спасибо.
Точка плавающей точки. –
-1 с плавающей запятой .. Google it. –
Прочитайте [Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) – Reimeus