![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Crot |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 31.1.2004 Репутация: 1 Всего: 3 |
У меня такая вопрос: почему форматы типа double для Pascal, C++, Delphi не совпадают с форматом типа double для Java?
Записываю я число в файл с помощью такой программы на Паскале:
Считываю с помощью такой программы:
Сначала я записывал в файл число 3.3. В этом случае программа на Яве давала такой ответ:
Но потом я попробовал число 333. И ни одно из выведенных на консоль чисел не совпало с записанным в файле:
Проблема: может быть я не те пакеты использую? Подскажите, пожалуйста, какие нужно. Если дело не в этом, тогда ответьте: как на Java прочитать число типа double из файла, чтобы оно соответствовало стандарту? То есть, какие преобразования надо сделать? |
||||||||
|
|||||||||
sap |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 2.1.2004 Репутация: нет Всего: нет |
действительно интересно
Если бы это были целые числа типа byte, short, long и т.п. их формат в файле конечно бы выяснить не составило труда. В данном случае самый надёжный способ (раз уж требуется это число читать из прог и на других языках) перед записью преобразовывать в строку. А при чтении соотвественно в double. По моему никакого понятия стандарт в данном случае не подходит |
|||
|
||||
Crot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 31.1.2004 Репутация: 1 Всего: 3 |
Дело в том, что файлы - создаются другими людьми.
Эти файлы - карты уровней для одной игры. И люди по всему миру их создают. А я хочу считать этот файл. На Паскале - без проблем, на Яве - х@#$% какая-то получается. З.Ы.: Как я понял, формат типа int для Java тоже не совпадает с форматом longint для Pascal. Но в данном случае проблема решается просто обратным порядком байтов в числе. |
|||
|
||||
sap |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 2.1.2004 Репутация: нет Всего: нет |
а числа всё время близки к оригиналу (как 317 к 333)?
|
|||
|
||||
sap |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 2.1.2004 Репутация: нет Всего: нет |
между 317 и 333 разница ровно 16. т.е. как будто теряются 4ре младших бита.
для начала я бы на твоём месте поправил немного код. т.е. Не складывал бы а делал поразрядное или ( оператор | ) сделав предварительно приведение b[i] к long А потому бы уже выяснял дальше что не так. |
|||
|
||||
sap |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 2.1.2004 Репутация: нет Всего: нет |
%) чё то я всё пишу и пишу, ну да ладно
в Java byte это ЗНАКОВОЕ число. поэтому я не уверен, что знаковый бит будет сдвигаться на одну позицию в лево, а не переноситься на крайнюю левую позицию. |
|||
|
||||
Crot |
|
|||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 31.1.2004 Репутация: 1 Всего: 3 |
Спасибо!
Я и предположить не мог, что тип byte в Java - знаковый. Теперь, зная это, никаких проблем не возникает... З.Ы.: Тело цикла изменил на: l = (l << 8) + b[i] + ((b[i]<0)?0x100:0); |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |