|
|
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Итак, пару примеров кода. Код: java 1. 2. Код: java 1. 2. Код: java 1. 2. Код: java 1. 2. Объясните кто-нибудь почему так. Проверил в сишарпе, там все нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 14:54:46 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
junior_devОбъясните кто-нибудь почему такМагия данных. Читать про приближённые вычисления вообще и про устройство компьютерных вещественных чисел - в частности. Если читать лень, то просто запомните, что "десять в отрицательной степени" не может быть представлено конечной двоичной дробью.Проверил в сишарпе, там все нормально."Смешно". Хотите округления - укажите в строке формата, скока точно граммов... знаков вам нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 15:01:25 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Добрый день, junior_dev! > double x = 31.3 + 0.97; > System.out.println(x); // Выводит 32.27, ОК > > > double x = 32.3 + 0.97; > System.out.println(x); // Выводит 33.269999999999996, ВТФ??? Логично, во втором случае сумма больше 2^5, поэтому на "хвост" после запятой остаётся меньше места и ошибка округления (0.97 не представимо в виде конечной двоичной дроби) вылезает в 15й знак. То, что в java по-умолчанию 15 знаков после запятой, а в C# меньше- сути не меняет. -- Алексей Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 15:04:32 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Ясно, всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 15:24:10 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraТо, что в java по-умолчанию 15 знаков после запятой, а в C# меньше- сути не меняет. Количество знаков после запятой тут не при чем. Double тип один и тот же и там и там. В C# вывод в консоль реализует округление. В Java - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 15:34:33 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
junior_dev, выведи double в двоичном представлении. Готов спорить что результат в C# и Java будет одинаковым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 15:37:19 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
junior_dev, Спасибо за вопрос. Сразу вспомнил своих бывших коллег из других отделов, у которых в документах Excel с формулами внезапно появлялись расхождения в 1*10e-9. Для экономистов-юристов это вообще шок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 16:17:36 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Особенно интересно когда номера счетов пишут в формате double. Еще смешнее... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2013, 16:25:55 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
На самом деле ещё смешнее, что в Java, языке, который теперь служит в основном для программирования безнес-логики всяческих приложений, до сих пор нет встроенной точной десятичной арифметики, и нет соответствующего типа данных. (встроенного). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2013, 19:15:14 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
MasterZivдо сих пор нет встроенной точной десятичной арифметики, и нет соответствующего типа данных. (встроенного).1. А где есть? 2. Что ещё предложите встроить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2013, 22:21:32 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
C# есть. А в Java нет примитивного типа для работы с фин.арифметикой. И это действительно проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2013, 22:38:58 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
авторC# есть. А в Java нет примитивного типа для работы с фин.арифметикой. И это действительно проблема. java.lang.BigDecimal не подходит что-ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 09:40:12 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
maytonC# есть. А в Java нет примитивного типа для работы с фин.арифметикой. И это действительно проблема. То есть java.math.BigDecimal, сорри http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 09:42:28 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
еще топикстартеру можно загуглить ieee-754 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 10:02:48 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
JavaSpringFrameworkHibernateGWTавторC# есть. А в Java нет примитивного типа для работы с фин.арифметикой. И это действительно проблема. java.lang.BigDecimal не подходит что-ли? А ты пробовал когда-нибудь закодить на ней какую-то простую расчётную формулу? Проверить что-то. Посчитать процент и сложить. А потом сравнить с другим языком в котором есть хотя-бы реализация инфиксных операций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 10:57:50 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
mayton, да вам не длинная арифметика то нужна, а перегрузка операторов ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2013, 11:39:13 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Добрый день, Basil A. Sidorov! > 1. А где есть? Ada :) Соответственно pl/sql. > 2. Что ещё предложите встроить? По хорошему надо было сделать определение операций. Давно было показано, зачем это надо. Но Гослинг, как чукча- не читатель был... -- Алексей Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 09:14:36 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Ну а так BigDecimal x = new BigDecimal(0.3 + 0.97,new MathContext(4, RoundingMode.HALF_EVEN)); System.out.println(x); // Выводит 1.27, ОК x = new BigDecimal(31.3 + 0.97,new MathContext(4, RoundingMode.HALF_EVEN));; System.out.println(x); // Выводит 32.27, ОК x = new BigDecimal(32.3 + 0.97,new MathContext(4, RoundingMode.HALF_EVEN));; System.out.println(x); // Выводит 33.27 x = new BigDecimal(49.3 + 12.97,new MathContext(4, RoundingMode.HALF_EVEN));; System.out.println(x); // Выводит 62.27 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 10:41:28 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
just_vladimirmayton, да вам не длинная арифметика то нужна, а перегрузка операторов ... Здесь - комплексная проблема. И попытка использовать double в операциях с деньгами - это отчасти плата за неудобство BigDecimal. Я много сжёг своей кармы в попытках исправить продакшен код где эти операции имели место. Но кода много - а я один. Даст бог в Scala концепция другая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 14:01:41 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
maytonЗдесь - комплексная проблемаА ещё бизнесу важен кадровый вопрос, а кадрам важны даты и интервалы между ними. Давайте встроим календарь и интервальную арифметику прямо в язык. Потом вспомним, что на компьютере у нас часы и реализуем два варианта - с учётом часовых поясов и без. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 16:47:13 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
99% задач с датами покрываются простейшей арифметикой наподобие Oracle Date. Арифметические операции с датой трактуются как сложение и вычитание дробного числа суток. Пример Код: plsql 1. возвращает вчерашний день. Разумеется функции работают в контексте локали. И разумеется код - самодостаточный. Некто Антон Кекс в своих видео-посланиях цивилизации джавистам справедливо обращает внимание на слёзную просьбу бизнес-аналитиков - как можно больше логики переносить в БД . И думается на то есть основания. И они лежат не в плоскости DBMS/Java а просто исходят из объективной проблемы. Бизнес-расчёты в Java-коде завуалированы. Код "шумит" лишними сущностями и понять ЧТО собственно мы вычисляем - довольно затруднительно. Собственно Java код не годится для обратного инжинеринга бизнес формулы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 17:14:29 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
mayton, В 18:00 местного времени владивостокский офис оформил приказ о приёме на работу "с сегодняшнего числа". Какую дату увидит московский офис завтра? Сегодня он уже спит. Ну или стандартная задача из ТК по расчёту отпускных - выходные учитываются, а праздничные - нет. P.S. Я не против того, что мы живём в мире всё возрастающего комфорта - мне это очень даже нравится. Я против того, чтобы объявлять недостаток комфорта глобальным дефектом, требующим исправления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 19:04:52 |
|
||
|
Арифметика Джавы. WTF?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Давай развивать твою мысль. Через 300 лет нам понадобиться несколько дополнительных сущностей в локализации. Нам надо будет указывать номер планеты в солнечной системе. Номер галлактики. Номер скопления или кластера и учитывать прочие забавные эффекты физики света и времени о которых писал старый волосатый и усатый немец. Поэтому давай не будем разбивать себе лоб об пол решая ОБЫЧНЫЕ каждодневные задачи. Про локализацию я упомянул. Я живу и работаю в Украине и поэтому для всех местных проектов часовой пояс - UTC+2 и даст бог нет пока проблем со временем во Владивостоке. Тоже самое с decimal и java.lang.BigDecimal. Это разный подход. Я не буду спорить со столпами ООП на тему концептуальности, нужности и ненужности примитивных типов и перегрузки операций. Но я знаю что программист как человек устроен так что он ВСЕГДА упрощает себе задачу. Он всегда старается писать компактно и лаконично. Ему иногда мешают очень шумные маркетинговые технологии но я верю в то что здравый смысл восторжествует. Дайте в Java примитивный тип decimal и все будут рукоплескать. Унылое бормотание теоретиков на тему того что дескыть неконцептульаненько и некрасивинько никого не будут волновать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2013, 19:15:51 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2128984]: |
0ms |
get settings: |
19ms |
get forum list: |
30ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
76ms |
get topic data: |
25ms |
get forum data: |
6ms |
get page messages: |
113ms |
get tp. blocked users: |
3ms |
| others: | 340ms |
| total: | 628ms |

| 0 / 0 |
