Неточность, или что-то в этом роде

332
4
Всем привет, не хочу занимать ни у кого много времени, но прошу, если кто знает ответить:
Сегодня наткнулся на такую ошибку (или неточность, хз):
Код:
System.out.println(9/1024/1024 + " bormal, but integer");
System.out.println((double)9/1024/1024/1024 + " BAD!");
Выводит 8 с хвостиком!!!
Хотя согласно закону математики должен выводить примерно 0.008381903171539062
Подскажите плз в чем ошибка.
 
8.381903171539307E-9BAD!
[merge_posts_bbcode]Добавлено: 05.03.2016 20:06:53[/merge_posts_bbcode]

только из консоли
 
Почитай про мантиссу и дробные числа(тебе нужно 64-битное число). Если хочется точнее, то бери BigDecimal
 
ну так это же неточность?
 
Ты про "Е"? Я думаю(ибо не знаю), что Е - метка, что число было округлено. Т.к. это иррациональное(вроде) число, то оно бесконечно. Но выводить вечно его нельзя, поэтому и так
 
Довольно точно вывело, это ты посчитал неправильно.
Если считать приблизительно на пальцах, то можно заменить на 9/1000/1000/1000 = 9/1000 000 000 = 9*10^(-9)
[merge_posts_bbcode]Добавлено: 05.03.2016 21:15:47[/merge_posts_bbcode]

E-9 - это и есть 10[sup]-9[/sup]
 
А разве не...
2,7182818284 5904523536 0287471352 6624977572 4709369995 9574966967 6277240766 3035354759 4571382178 5251664274 2746639193 2003059921 8174135966 2904357290 0334295260 5956307381 3232862794 3490763233 8298807531 9525101901 1573834187 9307021540 8914993488 4167509244 7614606680 8226480016 8477411853 7423454424 3710753907 7744992069 5517027618 3860626133 1384583000 7520449338 2656029760 6737113200 7093287091 2744374704 7230696977 2093101416 9283681902 5515108657 4637721112 5238978442 5056953696 7707854499 6996794686 4454905987 9316368892 3009879312 7736178215 4249992295 7635148220 8269895193 6680331825 2886939849 6465105820 9392398294 8879332036 2509443117 3012381970 6841614039 7019837679 3206832823 7646480429 5311802328 7825098194 5581530175 6717361332 0698112509 9618188159 3041690351 5988885193 4580727386 6738589422 8792284998 9208680582 5749279610 4841984443 6346324496 8487560233 6248270419 7862320900 2160990235 3043699418 4914631409 3431738143 6405462531 5209618369 0888707016 7683964243 7814059271 4563549061 3031072085 1038375051 0115747704 1718986106 8739696552 1267154688 9570350354
 
h_1457195538_2096798_65b23368b5.png


Это у нас экспонента это e^x, а в английском это немного другое.
 
нет нет, я не про E, я про то что обычный файл весом в 9 байт java измерил в ГБ и вышло 8.38190...
Как из 9 Б преврабилось в 8,38190 ГБ
 
Запись
8.381903171539307E-9
означает
8.381903171539307 * 10^(-9)
то есть
8,381903171539307 * 0,000000001
что равно
0,000000008381903171539307

Может так поймешь?
 
А, спс, понял, только как исправить?
Напомню код
Код:
System.out.println((double)9/1024/1024/1024);
[merge_posts_bbcode]Добавлено: 06.03.2016 14:44:16[/merge_posts_bbcode]

Округлить?
 
0,8 выдаёт? Может потому, что ты делишь на 1024, а не 1000?
 
Кстати если применять к файлам весящим в 1 ГБ и более всё без ошибок, верно
[merge_posts_bbcode]Добавлено: 06.03.2016 14:48:35[/merge_posts_bbcode]

Ну мне же наго ГБ получить, значит из 9Б / 1024!
 
Нет тут ошибок. Ты делишь на 1024 и ожидаешь круглого числа
 
3 раз
[merge_posts_bbcode]Добавлено: 06.03.2016 14:50:18[/merge_posts_bbcode]

Нет, я ожидаю [font=Verdana, Helvetica, Arial, sans-serif]0,000000008381903171539307,[/font]
[font=Verdana, Helvetica, Arial, sans-serif]Как конь и написал, но я не знаю как это осуществить[/font]

[merge_posts_bbcode]Добавлено: 06.03.2016 14:50:44[/merge_posts_bbcode]

Oldestkon написал(а):
Запись
8.381903171539307E-9
означает
8.381903171539307 * 10^(-9)
то есть
8,381903171539307 * 0,000000001
что равно
0,000000008381903171539307

Может так поймешь?

[merge_posts_bbcode]Добавлено: 06.03.2016 14:52:59[/merge_posts_bbcode]

Короче, скажите плз как из 9 б мне получить ГБ
 
Heitem написал(а):
Кстати если применять к файлам весящим в 1 ГБ и более всё без ошибок, верно
Похоже ты так и не понял. Не пойти бы тебе школьную математику подучить?

Можешь использовать этот код:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format((double)9/1024/1024/1024));
 
Oldestkon написал(а):
Запись
8.381903171539307E-9
означает
8.381903171539307 * 10^(-9)
то есть
8,381903171539307 * 0,000000001
что равно
0,000000008381903171539307

Может так поймешь?
[merge_posts_bbcode]Добавлено: 06.03.2016 16:06:37[/merge_posts_bbcode]

Asd73 написал(а):
Heitem написал(а):
Кстати если применять к файлам весящим в 1 ГБ и более всё без ошибок, верно
Похоже ты так и не понял. Не пойти бы тебе школьную математику 
Я понял, конь объяснил достаточно, спс, я просто хотел узнать как исправить
 
Назад
Сверху