Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 16 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

подскажите, как можно отформатировать (округлить до сотых) результаты из строки типа этой?

System.out.println(new Float(Start.gewichten.persarr[i].getBmi()).toString());



Партнер
 

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
а взять строку, прочитать до 2 сотого разряда (ориентиром будет точка), положить в новую строку и переконвертить во Float? Может есть более простые способы - но этот, что называется , в лоб.
А вообще - теперь есть Formatter - может там чего можно, це ж printf :)


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 29.12.2004
Что бы не создавать новую тему решил запостить здесь...

Есть такой кусок кода:

Код:
import java.io.*;
import java.nio.charset.*;
   
public class Encode3
{

    public static void main(String args[]) throws IOException
      {
         String buff = "ЙЦУКЕНГШЩЗХЇЁФІВАПРОЛДЖЄЯЧСМИТЬБЮИЫ";
         buff = new String(buff.getBytes("Cp866"),"Cp1251");
         System.out.println(buff);
      }
}

после вывода на экран - вместо буквы "Ш" получаеться "?".
Читал http://www.javaportal.ru/java/articles/ ... .html#bugs вот здесь, но что-т оне понял как решить эту проблему.
Вообщем задача: русский текст в Unicode - перегнать в DOS.

_________________
Роль сумашедшего очень удобна - ты не в себе, но себе на уме.


Последний раз редактировалось Николай1979 19.09.2006 16:55, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
там идет речь о том, что far сохраняет русские буквы в кодировке DOS (то есть если исходник набран в фаре там уже не юникод!)
а javac пытается прочитать из исходника 1251
соответственно для начала нужно подать указанный ключик в статье джаваку для правильного чтения исходника...


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 29.12.2004
Catar спасибо, за ответ.
Может я не совсем правильно описал свою проблему.
Вообщем тут проблема какая - я читаю данные из оракла, и пишу их в файл.
Если не проводить ни какие преобразование, то все буквы ложаться в файл нормально но в Win-кодировке (Cp1251).
Мне надо их на лету преобразовывать в Dos(Cp866)-кодировку.
Вот здесь и возникает проблема - заглавная буква "Ш" - теряеться.
JAVA-класс работает под ораклом (на встроенной ВМ).
Может я не коректно провожу преобразование?
Я с Явой не очень долго дружу и этот вариант изменения кодировки, я первое что нашел.

_________________
Роль сумашедшего очень удобна - ты не в себе, но себе на уме.


 

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
Николай1979 писал(а):
но в Win-кодировке (Cp1251)

потому что ты пишешь под виндой и соответственно там дефолт - 1251.
Николай1979 писал(а):
Мне надо их на лету преобразовывать в Dos(Cp866)-кодировку.

если ты хочешь сразу писать в DOS кодировку, то пользуй нечто вроде
out = new FileWriter(filename, "charset");
где charset - название кодировки (я не помню как там правильно писать надо... cp866? )


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 29.12.2004
Catar ок спасибо, попробую. Обязательно отпишусь если положительно решу траблу.

_________________
Роль сумашедшего очень удобна - ты не в себе, но себе на уме.


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 29.12.2004
Вообщем проблему решил следующим образом: написал свою функцию для преобразования.

Код:
   private static byte[] ConvToDos (String value)
   {
      byte[] buff = new byte[value.length()];
      Character cc = null;

      for (int m=0; m<value.length(); m++)
         {
            cc = new Character(value.charAt(m));
            
            switch (cc.hashCode())
               {
               case 1040: buff[m]=(byte)128;break; //А
               case 1041: buff[m]=(byte)129;break; //Б
               case 1042: buff[m]=(byte)130;break; //В
               case 1043: buff[m]=(byte)131;break; //Г
               case 1044: buff[m]=(byte)132;break; //Д
               case 1045: buff[m]=(byte)133;break; //Е
               case 1046: buff[m]=(byte)134;break; //Ж
               case 1047: buff[m]=(byte)135;break; //З
               case 1048: buff[m]=(byte)136;break; //И
               case 1049: buff[m]=(byte)137;break; //Й
               case 1050: buff[m]=(byte)138;break; //К
               case 1051: buff[m]=(byte)139;break; //Л
               case 1052: buff[m]=(byte)140;break; //М
               case 1053: buff[m]=(byte)141;break; //Н
               case 1054: buff[m]=(byte)142;break; //О
               case 1055: buff[m]=(byte)143;break; //П
               case 1056: buff[m]=(byte)144;break; //Р
               case 1057: buff[m]=(byte)145;break; //С
               case 1058: buff[m]=(byte)146;break; //Т
               case 1059: buff[m]=(byte)147;break; //У
               case 1060: buff[m]=(byte)148;break; //Ф
               case 1061: buff[m]=(byte)149;break; //Х
               case 1062: buff[m]=(byte)150;break; //Ц
               case 1063: buff[m]=(byte)151;break; //Ч
               case 1064: buff[m]=(byte)152;break; //Ш
               case 1065: buff[m]=(byte)153;break; //Щ
               case 1066: buff[m]=(byte)154;break; //Ъ
               case 1067: buff[m]=(byte)155;break; //Ы
               case 1068: buff[m]=(byte)156;break; //Ь
               case 1069: buff[m]=(byte)157;break; //Э
               case 1070: buff[m]=(byte)158;break; //Ю
               case 1071: buff[m]=(byte)159;break; //Я
               case 1025: buff[m]=(byte)240;break; //Ё
               case 1031: buff[m]=(byte)244;break; //Ї
               case 1030: buff[m]=(byte)108;break; //І
               case 1028: buff[m]=(byte)242;break; //Є
               
               case 1072: buff[m]=(byte)160;break; //а
               case 1073: buff[m]=(byte)161;break; //б
               case 1074: buff[m]=(byte)162;break; //в
               case 1075: buff[m]=(byte)163;break; //г
               case 1076: buff[m]=(byte)164;break; //д
               case 1077: buff[m]=(byte)165;break; //е
               case 1078: buff[m]=(byte)166;break; //ж
               case 1079: buff[m]=(byte)167;break; //з
               case 1080: buff[m]=(byte)168;break; //и
               case 1081: buff[m]=(byte)169;break; //й
               case 1082: buff[m]=(byte)170;break; //к
               case 1083: buff[m]=(byte)171;break; //л
               case 1084: buff[m]=(byte)172;break; //м
               case 1085: buff[m]=(byte)173;break; //н
               case 1086: buff[m]=(byte)174;break; //о
               case 1087: buff[m]=(byte)175;break; //п
               case 1088: buff[m]=(byte)224;break; //р
               case 1089: buff[m]=(byte)225;break; //с
               case 1090: buff[m]=(byte)226;break; //т
               case 1091: buff[m]=(byte)227;break; //у
               case 1092: buff[m]=(byte)228;break; //ф
               case 1093: buff[m]=(byte)229;break; //х
               case 1094: buff[m]=(byte)230;break; //ц
               case 1095: buff[m]=(byte)231;break; //ч
               case 1096: buff[m]=(byte)232;break; //ш
               case 1097: buff[m]=(byte)233;break; //щ
               case 1098: buff[m]=(byte)234;break; //ъ
               case 1099: buff[m]=(byte)235;break; //ы
               case 1100: buff[m]=(byte)236;break; //ь
               case 1101: buff[m]=(byte)237;break; //э
               case 1102: buff[m]=(byte)238;break; //ю
               case 1103: buff[m]=(byte)239;break; //я
               case 1105: buff[m]=(byte)241;break; //ё
               case 1111: buff[m]=(byte)245;break; //ї
               case 1110: buff[m]=(byte)105;break; //і
               case 1108: buff[m]=(byte)243;break; //є
               
               case 8470: buff[m]=(byte)252;break; //№
               
               default: buff[m]=value.substring(m,m+1).getBytes()[0];
               }
         }
      return buff;
   }


Для записи в файл используеться класс RandomAccessFile и его метод write

_________________
Роль сумашедшего очень удобна - ты не в себе, но себе на уме.


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 29.12.2004
Прошло время, я подучил немного Java и переделал выше приведенную функцию, таким образом:

Код:
   public static byte[] convToDos(String str)
   {
        int slen = str.length();
        byte[] res = new byte[ slen ];
        int cHash, strind;
        char[] cc = str.toCharArray();

      for( strind=0 ; strind < slen ; ++strind )
            {
                cHash = (int)cc[strind];
            res[strind] =    (cHash >= 1040 & cHash <= 1087) ? res[strind]=(byte)(cHash-912) :
                        (cHash >= 1088 & cHash <= 1103) ? res[strind]=(byte)(cHash-864) :
                        (cHash == 1104) ? res[strind]=(byte)241 :
                        (cHash == 1108) ? res[strind]=(byte)243 :
                        (cHash == 1110) ? res[strind]=(byte)105 :
                        (cHash == 1111) ? res[strind]=(byte)245 :
                        (cHash == 1025) ? res[strind]=(byte)240 :
                        (cHash == 1028) ? res[strind]=(byte)242 :
                        (cHash == 1030) ? res[strind]=(byte)73 :
                        (cHash == 1031) ? res[strind]=(byte)244 :
                        (cHash == 8470) ? res[strind]=(byte)252 : (byte)cHash;
            }
        return( res );
   }   


в результате существенно возросло быстродействие (при обработке больших массивох данных), код стал более компактен.

_________________
Роль сумашедшего очень удобна - ты не в себе, но себе на уме.


 

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
хоть бы комменты расставил... впрочем тут без втыкания в кодовую табличку все рано не разберешься...
оператор ? : - зло :)


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 29.12.2004
Catar в первом варианте было прямое сопоставление код в кодировке ЮНИКОД, коду этого же символа в ДОС-кодировке.
Во втором варианте вместо перебора массива, математически юникод преобразуеться в дос-код.
Catar писал(а):
оператор ? : - зло

Мжно узнать почему? До сих пор я встречался только с тем что данная конструкция хорошо подходит для записи небольших разветвлений, выполняеться быстрее чем традиционная конструкция if.....

_________________
Роль сумашедшего очень удобна - ты не в себе, но себе на уме.


 

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
Николай1979 писал(а):
Мжно узнать почему?

По читабельности кода :) а так конечно вполне нормальный оператор.....
Добавлено спустя 4 минуты, 24 секунды
Николай1979 писал(а):
выполняеться быстрее чем традиционная конструкция if

Кстати, не смотрел насколько? Просто Java не тот язык, на котором стоит заморачиваться с оптимизацией в стиле использования скажем операторов сдвига для деления\умножения на 2.


 

Заблокирован
Заблокирован
Статус: Не в сети
Регистрация: 29.12.2004
Catar писал(а):
Кстати, не смотрел насколько? Просто Java не тот язык, на котором стоит заморачиваться с оптимизацией в стиле использования скажем операторов сдвига для деления\умножения на 2.

Просто Java такой язык что он применяеться не только сам по себе но и в составе других языков/СУБД/технологий...
Если писать проги которые будут выполняться в VMJava, то - да... У меня же данный кусок кода работает в VMJava - которая встроенна в Oracle. И здесь уже разница в работе оптимизированного и неоптимицированного кода существенна. (Пример, но он уж очень частный - у меня на формирование ДБФ-файлов суммарным объемом 40 мб с первым вариантом преобразования уходило порядка 30 минут, со вторым - 16-17 мин. Время конечно приблизительные, но на глаз заметные.)

_________________
Роль сумашедшего очень удобна - ты не в себе, но себе на уме.


 

Member
Статус: Не в сети
Регистрация: 11.04.2004
Откуда: СПБ
Николай1979 писал(а):
которая встроенна в Oracle. И здесь уже разница в работе оптимизированного и неоптимицированного кода существенна.

Да. Оракл - это да.
Николай1979 писал(а):
в составе других языков

JNI? Извращение еще то.


 

Member
Статус: Не в сети
Регистрация: 25.10.2006
Никто не подскажет как сделать тройные комбинации клавиш для меню? Ну типа Inspector Ctrl+Shift+I ? И ещё как прописать в гарячих клавишах Return?


 

Member
Статус: Не в сети
Регистрация: 31.08.2005
Откуда: Мир
Как получить из изображения матрицу пикселей? (RGB)
есть у меня например Image image, могу его выводить (g.drawImage(image,0,0,null);)
но как получить цвета пикселей ? хотя бы одного подскажите плз.
Добавлено спустя 2 минуты, 1 секунду
Как получить из изображения матрицу пикселей? (RGB)
есть у меня например Image image, могу его выводить (п.drawImage(image,0,0,null);)
но как получить цвета пикселей ? хотя бы одного подскажите плз.

_________________
Loading...


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 16 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan