Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Свои CStr и CDbl Добавлено: 27.10.05 18:14  

Автор вопроса:  Страшный Сон
Реально ли в VB6 сделать полностью свои функции конверсии данных? Меня интересует String - Double и Double - String.

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #1 Добавлено: 27.10.05 22:45
Конечно реально:

Floating-point numbers use the IEEE (Institute of Electrical and Electronics Engineers) format

поэтому, изучаешь сей формат, и вперёд, на мины.
Сводится к элементарному парсингу

Ответить

Номер ответа: 2
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #2 Добавлено: 28.10.05 12:26
Где могу найти подробное описание? Желательно на русском.

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 28.10.05 12:58
http://bbs.vbstreets.ru/viewtopic.php?t=7389

Ответить

Номер ответа: 4
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #4 Добавлено: 28.10.05 13:45
На русском не знаю, на английском в msdn есть.
Там ничего сложного нет. Первый бит - знак числа.
Далее:
Type     Exponent length    Mantissa length
float         8 bits            23 bits
double        11 bits           52 bits


Понятно, что float - это single.
Единственно надо учитывать, что экспонента храниться в беззнаковой форме:

Because exponents are stored in an unsigned form, the exponent is biased by half its possible value. For type float, the bias is 127; for type double, it is 1023. You can compute the actual exponent value by subtracting the bias value from the exponent value.


Т.е. если экспонента меньше 127, то это отрицательная экспонента, если больше - положительная. Для double соответственно больше и меньше 1023.

Ответить

Номер ответа: 5
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #5
Добавлено: 28.10.05 23:19
Можно поинтересоваться... чем не подошли функции VB?

Ответить

Номер ответа: 6
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #6 Добавлено: 28.10.05 23:24
Да мне нужно, чтобы результат не зависел от настроек Windows...

Ответить

Номер ответа: 7
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #7
Добавлено: 28.10.05 23:47
Тогда можно так.

Где-нибудь при старте программы
DecimalSeparator = mid$(cstr(1.1),2,1)
, где DecimalSeparator - глобальная переменная. А дальше:
Function MyCDbl(byref St as string) as double
MyCDbl=cdbl(replace(st,".",DecimalSeparator))
End function

Function MyCStr(byval d as double) as String
MyCStr = replace(cstr(d),DeciamlSeparator,".";)
End function


По-моему, прокатит, если я нигде не опечатался. Везде будет использовать точку как разделитель целой и дробной части.
Я надеюсь, что все учел.

Ответить

Номер ответа: 8
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #8 Добавлено: 29.10.05 00:49
Странные вы.

str$ и val не зависят от настроек.

Ответить

Номер ответа: 9
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #9
Добавлено: 29.10.05 01:16
str$ и val не зависят от настроек.

Чистая правда. Вот только Val иногда замены требует - она ошибку не выдает, когда туда фигню ввели. А вот Str всем хороша, и как то я сразу не догадался вместо
replace(cstr(d),DeciamlSeparator,".";)
написать
Trim(Str(d))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам