C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Преобразование типов данных  (Прочитано 2424 раз)
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Преобразование типов данных
« : 29 Апрель 2014, 12:34:01 »

Привожу пример кода:
double fsend = StrToFloatDef("3573,56902",0);
     double d =  fsend/0,014541;
     int i = static_cast(d);
     Label1->Caption = IntToStr(i);
Результат не соответствует числу 32767  (Выводит 32766) 
Помогите плиз разобраться куда делась единичка?
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Преобразование типов данных
« Ответ #1 : 29 Апрель 2014, 15:35:25 »

Здесь столько приведений типов, что не вижу смысла что-то объяснять... Но всё же намекну: как ты думаешь, каким образом вещественный тип будет приведен к целочисленному?
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: Преобразование типов данных
« Ответ #2 : 15 Май 2014, 12:21:22 »

Из-за представления вещественного числа с использованием мантиссы даже не представляю.
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Преобразование типов данных
« Ответ #3 : 15 Май 2014, 13:27:58 »

Подсказка: по какому принципу работает округление вверх?
Кстати, зачем нужно такой код городить?
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: Преобразование типов данных
« Ответ #4 : 15 Май 2014, 16:35:50 »

Пишу имитаторы устройств. Обмен между ними осуществляется 32-х разрядными словами типа ULONG. А весь этот огород нужен для передачи каких либо значений по разрядной сетке. К примеру цена млад разряда 0.02 а нужно пользователю передать число например 2.8     Надо определить его двоичное представление. Пользователь вводит в Edit 2.8   Прога его читает  (StrToFloat) и делит на 0.02  получается целое число которое нужно потом засунуть в 32х разрядное слово и передать через спец плату           а тут эти преобразования будь они не ладны что только не пробовал ппц просто
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: Преобразование типов данных
« Ответ #5 : 15 Май 2014, 16:43:50 »

Читал книги , форумы. Но везде объясняется только почему float f = 0,5 будет меньше double d = 0,5 хотя мол и там 0.5  и там 0.5.    Ответ из-за разрядности и представления этого самого дробного числа в памяти машины. А вот про преобразование молчок 
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


Re: Преобразование типов данных
« Ответ #6 : 16 Май 2014, 03:48:33 »

float - искусственный тип данных, в отличии от double.
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


Re: Преобразование типов данных
« Ответ #7 : 16 Май 2014, 10:51:52 »

Согласен))) А непосредственно с моим вопросом не поможите
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Преобразование типов данных
« Ответ #8 : 16 Май 2014, 11:18:25 »

Что ты ожидаешь-то? Приведение к целочисленному типу просто "обрезает" дробную часть. Если надо округлить, используй всяческие RoundTo, Ceil, Floor и т.д. - см. модуль Math.

И кстати, почему у меня на калькуляторе 3573,56902 / 0,014541 = 245758,132 Ты нигде не напутал?
Записан
Sergey1985
Участник


Сказали спасибо: +8/-1
Offline

Сообщений: 310


« Ответ #9 : 18 Июль 2014, 11:16:13 »

Никак нет!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.048 секунд. Запросов: 22.