Convert Double to LARGE_INTEGER

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Convert Double to LARGE_INTEGER

Сообщение sosed213 » 08.04.2012 (Вс) 22:41

Хакер писал(а):Особенно с учётом того, что ты сторонник философии «какой код нашёл, такой и использую, пока не найду варианта получше».


По этим словам, приятно осознавать что "тебя запомнили", но здесь ты прав, пока я склонен использовать один из последних вариантов :(
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Convert Double to LARGE_INTEGER

Сообщение arthur2 » 09.04.2012 (Пн) 17:14

Хакер писал(а):Единственный правильный в твоём случае код, это код, который пройдётся по строке и на основании этого сам заполнит поля LARGE_INTEGER-а. Без всяких там Val и CDec.
А чем именно мой код плох? В чем могут быть грабли? Я не могу представить ситуации, в которой результаты моего кода вдруг не совпадут с результатами правильного ручного заполнения полей LARGE_INTEGER-а
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Convert Double to LARGE_INTEGER

Сообщение Хакер » 09.04.2012 (Пн) 17:59

Тем же, чем и вариант с Val. И Val и CDec с радостью съедят потенциально нежелательные и неверные варианты, и даже дадут потенциально неправильные результаты.

Не нужно быть беспечным. Не нужно перекладывать ответственность по обработки строчки и её конвертации в число с себя на библиотеку функций языка. Если бы там были были достаточно хорошие функции, принимающие много сведений о том, по каким правилам обрабатывать числа, то это был бы хороший вариант.

Это очень легко, это очень упрощает жизнь программисту, но это и очень портит программу и усложняет жизнь пользователю. В моих серьёзных программах (не поделках для себя) не используются функции Val и atoi.

И к тому же Decimal — нецелочисленный тип. Это автоматически означает, что он не может вместить в себя всё то множество чисел, которое может вместить в себя LARGE_INTEGER.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Convert Double to LARGE_INTEGER

Сообщение arthur2 » 09.04.2012 (Пн) 19:53

Хакер писал(а):Не нужно быть беспечным. Не нужно перекладывать ответственность по обработки строчки и её конвертации в число с себя на библиотеку функций языка. Если бы там были были достаточно хорошие функции, принимающие много сведений о том, по каким правилам обрабатывать числа, то это был бы хороший вариант.
Ну, можно сделать дополнительные проверки строки на корректность - типа, чтобы запятых не было. В общем, ты просто предлагаешь написать собственный вариант Val? но так, чтобы он учитывал все возможные некорректные значения?

Хакер писал(а): И к тому же Decimal — нецелочисленный тип. Это автоматически означает, что он не может вместить в себя всё то множество чисел, которое может вместить в себя LARGE_INTEGER.

CDec("18446744073709551615") - это максимально возможное LARGE_INTEGER. 0 - минимальное. Значит весь диапазон охватывается.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Convert Double to LARGE_INTEGER

Сообщение Хакер » 09.04.2012 (Пн) 20:27

arthur2 писал(а):Ну, можно сделать дополнительные проверки строки на корректность - типа, чтобы запятых не было.

Это двойная работа. Проверка не легче, чем преобразование строки с числом в число с нуля.

Val/CDec:
12gorod считают нормальным числом и возвращают 12 (только Val).
& считают нормальным числом и возвращают 0 (только Val).
&head считается нормальным числом и возвращает 3757.
&O10 считается нормальным числом и возвращает 8.
5e+5 считается нормальным числом и возвращает 500000.
() считается нормальным числом и возвращатся ноль (только Val).
(123) считается нормальным числом и возвращается: Val возвращает ноль, а CDec возвращает минус 123.

Многие из этих правил кажутся логичным программисту, а некоторые кажутся откровенными глюками. Но рядового пользователя, не являющегося программистом, все эти случаи ошеломят.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 09.04.2012 (Пн) 20:41

Хакер писал(а):все эти случаи ошеломят

А может не надо всякую фигню в поле ввода писать тогда?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Convert Double to LARGE_INTEGER

Сообщение Хакер » 09.04.2012 (Пн) 21:41

Нет. Не надо перекладывать на пользователя свои программистские заботы. Следить за правильность ввода, отвергать некорректные входные данные — задача программы. Защита от дурака — забота программиста. Не нужно делать её с мыслью «да пусть просто пользователь не будет дураком».
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Convert Double to LARGE_INTEGER

Сообщение iGrok » 09.04.2012 (Пн) 22:27

Qwertiy писал(а):А может не надо всякую фигню в поле ввода писать тогда?

http://cs10742.userapi.com/u115464932/1 ... 8858a4.jpg
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 09.04.2012 (Пн) 22:55

Хакер писал(а):Не нужно делать её с мыслью «да пусть просто пользователь не будет дураком».

Я не об этом.

Моё мнение такое: если можно интерпритировать нечто как допустимое значение, то именно так и следует сделать. Итогового подтверждения с указанием числа 3757 вполне достаточно. Если пользователь писал всякую ерунду просто чтобы поэксперементировать, то этого вполне достаточно. В любом случае, нажмёт кнопочку Назад и поменяет, если надо. А может, кому-то размер будет лень считать, поэтому он напишет &H80 GB - почему бы нет?

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Convert Double to LARGE_INTEGER

Сообщение sosed213 » 10.04.2012 (Вт) 5:07

Хакер, поделись идеей реализации такой проверки.

Судя по
Хакер писал(а): В моих серьёзных программах (не поделках для себя) не используются функции Val и atoi.

становится ясно что такой вариант существует, и ты его используешь. (Если только это не сводится к созданию функции Function StringToLong (byval strIn as Variant, ... Byval куча критериев...) as Long (или LARGE_INTEGER)))

И ради любопытства хотел бы посмотреть на, хотя бы один, твой проект (наверняка это что то грандиозное). :)
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Convert Double to LARGE_INTEGER

Сообщение Хакер » 10.04.2012 (Вт) 7:40

sosed213 писал(а):Хакер, поделись идеей реализации такой проверки.

Никогда у меня не будет отдельной проверки и отдельной конвертации. Всегда интегрированная друг-в-друга проверка и конвертация. Иные решения противоречат принципу лени.

sosed213 писал(а):(Если только это не сводится к созданию функции Function StringToLong (byval strIn as Variant, ... Byval куча критериев...) as Long (или LARGE_INTEGER)))

Сводится.
У меня сейчас отключён от компьютера жесткий диск с исходниками, но выглядит это примерно так:
http://share.fire-lines.ru/firehacker/p ... age_01.jpg (Си, а не VB).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Convert Double to LARGE_INTEGER

Сообщение Mikle » 10.04.2012 (Вт) 9:44

Хакер писал(а):Всегда интегрированная друг-в-друга проверка и конвертация. Иные решения противоречат принципу лени.

Проверка может понадобиться перед конвертацией в какой-то другой формат, вообще без конвертации, просто проверяем, что поле заполнено правильно и оставляем в таком виде. А может наоборот понадобиться конвертация для данных, про которые ты знаешь, что они уже проверены.
При конвертации неизбежно делается только часть проверки - проверка соответствия допустимому диапазону.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Convert Double to LARGE_INTEGER

Сообщение sosed213 » 10.04.2012 (Вт) 10:07

Прошу прощения, если скажу глупость.
Но чем может быть плох простой способ:

Код: Выделить всё
If Not(Trim(Text1.Text) = CStr(Val(Trim(Text1.Text)))) Then
   Msgbox "Введены некорректные данные"
   Exit sub
end if


Т.е. Строку переводим в число, а затем это число в строку и сравниваем с первоисточником.
Если изначально присутствовал посторонний символ, то и строки будут не равны, а значит, что нужно изменить вводимое значение.
Можно добавить CStr(cLng(Val(Trim(Text1.Text)))) , если надо чтобы число было целым.

А глупым вопрос может оказаться из-за:
Хакер писал(а):Не нужно быть беспечным. Не нужно перекладывать ответственность по обработки строчки и её конвертации в число с себя на библиотеку функций языка.
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Convert Double to LARGE_INTEGER

Сообщение Mikle » 10.04.2012 (Вт) 10:20

sosed213 писал(а):Прошу прощения, если скажу глупость.
Но чем может быть плох простой способ:

Сделай так:
Код: Выделить всё
Option Explicit

Private Sub Text1_Change()
  Caption = ((Trim(Text1.Text) = CStr(Val(Trim(Text1.Text)))))
End Sub

Попробуй вводить - сразу сам увидишь, где проблемы. Ты ведь уже это спрашивал, и тебе отвечали, ты даже писал в ответ "хм, ага". Или ты поспал ночь, мозг обнулился - и теперь задаёшь те же вопросы заново?
Вообще, ты пытаешься написать процедуру проверки, не определившись с тем, что же считать корректным. Скажем так: "корректными считаются только целые положительные числа в пределах от N1 до N2, допустима только десятичная система счисления без использования степенного формата записи".

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Convert Double to LARGE_INTEGER

Сообщение sosed213 » 10.04.2012 (Вт) 10:40

Хм, ага - означает согласие, о неравенстве
Qwertiy писал(а):Ага, получается поверка "+5" = "5", а это False :D



А изначально я и считал так:
Mikle писал(а): Скажем так: "корректными считаются только целые положительные числа в пределах от N1 до N2, допустима только десятичная система счисления без использования степенного формата записи".
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Convert Double to LARGE_INTEGER

Сообщение Mikle » 10.04.2012 (Вт) 10:59

sosed213 писал(а):А изначально я и считал так

Тогда, может, просто запретить ввод всего, кроме цифр?
И, если ты так считал, то где в твоей ф-ции проверки сравнение с N1 и N2, отсев дробей, отрицательных?
sosed213 писал(а):Хм, ага - означает согласие, о неравенстве

, а "05" - тоже некорректный ввод?

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Convert Double to LARGE_INTEGER

Сообщение sosed213 » 10.04.2012 (Вт) 11:05

Mikle писал(а):И, если ты так считал, то где в твоей ф-ции проверки сравнение с N1 и N2, отсев дробей, отрицательных?


Теперь я понял в чем плох мой способ. Спасибо Mikle.

А (05 <> 5) , так что тоже не корректный ввод будет.
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Convert Double to LARGE_INTEGER

Сообщение arthur2 » 10.04.2012 (Вт) 19:27

Хакер писал(а):Это двойная работа. Проверка не легче, чем преобразование строки с числом в число с нуля.
Нет, это не двойная работа.

Давай вспомним условия задачи: вводиться будут размеры в байтах :) Но что-то я сомневаюсь, что, скажем, 150 гигов целесообразно вводить именно в байтах. Так что самое правильное - просить ввести число в гигобайтах, а потом преобразовывать уже в байты. Так что твое парсение строки, выражающей число именно в байтах, окажется просто не нужным.

Как вариант решения: текстовое поле, в котором можно вводить только цифры (ну, пусть ещё запятые). Ни какие скобки, плюсы и минусы не нужны, в двоичном, восьмеричном или шестнадцатиричном виде вводить число тоже вряд ли кому понадобиться. Рядом с текстовым полем - листбокс с допустимыми единицами измерения. (если всё ж таки понадобится ввод в шестнадцатиричном или ещё каком виде, можно перед текстовым полем расположить ещё один листбокс со всеми допустимыми префиксами)

Теперь введенную строку переводим в число (сразу в вариант через CDec) и умножаем на нужный коэффициент в зависимости от единиц измерения. Мало того, с полученным числом можно делать разные арифметические действия, причем, без каких-либо ухищрений. И уже потом - моей функцией - можем легко перевести результат в LARGE_INTEGER.
Артур
 
   

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Convert Double to LARGE_INTEGER

Сообщение sosed213 » 11.04.2012 (Ср) 3:37

arthur2, это лучший вариант. поле для ввода + лист бокс с ед. измерения (Mb, Gb и Tb). Даже запятую не нужно использовать. А вводится будет, только в десятичном виде.

:) Спасибо
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Convert Double to LARGE_INTEGER

Сообщение Хакер » 11.04.2012 (Ср) 11:05

Артур, я сейчас в Омске, с очень дорогим и медленным интернетом, и не могу много писать. Когда я вернусь домой — обязательно отвечу.
А пока коротко: ты не прав. Это двойная работа, и вот это «что твое парсение строки, выражающей число именно в байтах» — исключительно твоя фантазия.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Convert Double to LARGE_INTEGER

Сообщение sosed213 » 11.04.2012 (Ср) 11:20

Омске?!?!?! Заезжай в гости!!! Чаем напою!
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Convert Double to LARGE_INTEGER

Сообщение arthur2 » 16.04.2012 (Пн) 19:22

Хакер писал(а):Единственный правильный в твоём случае код, это код, который пройдётся по строке и на основании этого сам заполнит поля LARGE_INTEGER-а. Без всяких там Val и CDec
Хакер писал(а): и вот это «что твое парсение строки, выражающей число именно в байтах» — исключительно твоя фантазия

Если эта строка, на основании которой предлагается заполнять LARGE_INTEGER - число не в байтах, а в каких-то других единицах, то число на выходе вполне уместится в лонг и пихать его в LARGE_INTEGER на этом этапе - смысла нет. CDec позволит производить с числом любые арифметические действия без ухищрений (если же заполнять именно LARGE_INTEGER - для всей арифметики придется писать специальные функции). А раз в строке ещё на этапе ввода будут отфильтрованы все неподходящие варианты, то Val сработает вполне корректно. Так что ни какой двойной работы с моим подходом - не вижу.
Последний раз редактировалось arthur2 17.04.2012 (Вт) 20:33, всего редактировалось 1 раз.
Артур
 
   

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Convert Double to LARGE_INTEGER

Сообщение sosed213 » 17.04.2012 (Вт) 6:56

Артур, твой способ хороший, и мне подходит. Только я CopyMemory заменил на GetMem и PutMem.
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Convert Double to LARGE_INTEGER

Сообщение arthur2 » 17.04.2012 (Вт) 20:34

sosed213 Да я понял, что тебе этот способ подошел :) Про путмем тоже очевидно - с копимемери я просто экспериментировал, когда ещё просто не понятно было, сколько, куда и чего придется копировать :) У себя я тоже заменил на путмемы.

Собственно, Хакер обещал объяснить, в чем я не прав, как вернется из Омска - поэтому я и подождал, прежде чем возразить и тем поднять тему.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Convert Double to LARGE_INTEGER

Сообщение Хакер » 17.04.2012 (Вт) 20:37

Я вернулся, но объяснять как-то влом. Собственно, ты встал в позу и игнорируешь, что плохой способ является плохим. Я сейчас потрачу время на написание поста, и ты ещё придумаешь какие-нибудь оправдания тому, что можно использовать Val/CDec.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Convert Double to LARGE_INTEGER

Сообщение arthur2 » 17.04.2012 (Вт) 21:36

Ни в какую позу я не вставал. Я действительно не вижу, чем плох мой подход.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Convert Double to LARGE_INTEGER

Сообщение Хакер » 18.04.2012 (Ср) 10:31

arthur2 писал(а):Если эта строка, на основании которой предлагается заполнять LARGE_INTEGER - число не в байтах, а в каких-то других единицах, то число на выходе вполне уместится в лонг и пихать его в LARGE_INTEGER на этом этапе - смысла нет.

Во-первых, оно может быть как в каких-то других единицах, так и в байтах в том числе. Это первая твоя ошибка.
Подчёркнутая часть — вторая твоя ошибка. Если в качестве единиц указаны килобайты, ты не опишешь диски размером больше 2 Tb. Кем надо быть, чтобы сознательно писать дисковую утилиту, не умеющую работать с дисками больше 2 Тб? :roll:

arthur2 писал(а):А раз в строке ещё на этапе ввода будут отфильтрованы все неподходящие варианты, то Val сработает вполне корректно. Так что ни какой двойной работы с моим подходом - не вижу.

Как можно сначала писать о фильтрации, а потом говорить, что никакой двойной работы не видишь? Это шутка или что? Ты сам пишешь о двойной работе: сначала проверка ввода, потом преобразование в не тот тип, который нужно, и в конце пеобразование в тот тип, который нужно.

Я говорю:
Нужен код, который преобразует строку в LARGE_INTEGER, автоматически проверив при этом правильность строки.

Ты говоришь:
Нужен код, который сначала проверит правильность строки, потом код, который преобразует строку в ненужный (но удобный лентяям) тип, и потом код, который преобразует ненужный тип в LARGE_INTEGER.

Чей способ соответствует этому топику, а чей противоречит? В чьём способе больше дополнительной работы, которая не нужна для дела, а привлекается исключительно для того, чтобы писать меньше кода?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

sosed213
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 206
Зарегистрирован: 13.11.2007 (Вт) 21:19
Откуда: Омск

Re: Convert Double to LARGE_INTEGER

Сообщение sosed213 » 18.04.2012 (Ср) 17:17

Хакер писал(а):Кем надо быть, чтобы сознательно писать дисковую утилиту, не умеющую работать с дисками больше 2 Тб? :roll:


Кстати говоря, диск инициализированный как MBR и не может превышать 2 Тб. К сведению: в Microsoft Windows диск можно инициализировать как MBR так и GPT, есть еще и 3 вариант, RAW, но он вряд ли понадобится.
GPT жесткий диск может значительно превышать объем 2 Тб.

Так если я пишу программу для работы только с MBR дисками (пока) то 2 Тб мне вполне хватит.


P.S. Фраза "Кем надо быть..." по мойму немного резковата.
Не могу сказать что знаю все, но и за дурака прошу меня не считать.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Re: Convert Double to LARGE_INTEGER

Сообщение arthur2 » 18.04.2012 (Ср) 19:17

Оk, оде лени мой подход не соответствует. Зато часть про ограничение неправильного ввода - соответствует, на мой взгляд, удобству пользователя.
Хакер писал(а):Нужен код, который сначала проверит правильность строки
Я бы делал проверку ввода в любом случае - каким бы способом там дальше ни преобразовывалась строка в число. Так что первый "ненужный код" я считаю нужным. А раз строка после ввода будет заведомо корректной, не вижу преимуществ в самописной Val перед стандартной.
Хакер писал(а):потом код, который преобразует строку в ненужный (но удобный лентяям) тип, и потом код, который преобразует ненужный тип в LARGE_INTEGER.
"Ненужный, но удобный тип" я как раз считаю нужным - именно по причине удобства. И тут дело даже не в лени - я сомневаюсь, что самописная арифметика для LARGE_INTEGER будет работать лучше или хотя бы не хуже, чем стандартная арифметика с "ненужным" типом. Поэтому и предлагаю преобразовывать в LARGE_INTEGER только тогда, когда это непосредственно понадобится.

Если в качестве единиц указаны килобайты, ты не опишешь диски размером больше 2 Tb
Описывать в килобайтах диск, размер которого больше двух терабайт - это какая-то редкая форма мазохизма :) Впрочем, мой код такому мазохизму не мешает - можно описывать хоть в байтах.
Артур
 
   

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Convert Double to LARGE_INTEGER

Сообщение Хакер » 18.04.2012 (Ср) 19:28

arthur2 писал(а):Я бы делал проверку ввода в любом случае - каким бы способом там дальше ни преобразовывалась строка в число. Так что первый "ненужный код" я считаю нужным.

В способе с функция DecimalStringToLongInt эта проверка является неотъемлемой частью преобразования. А у тебя она — дополнительный самостоятельный код.

arthur2 писал(а):И тут дело даже не в лени - я сомневаюсь, что самописная арифметика для LARGE_INTEGER будет работать лучше или хотя бы не хуже, чем стандартная арифметика с "ненужным" типом.

Безосновательные страхи.

arthur2 писал(а):Поэтому и предлагаю преобразовывать в LARGE_INTEGER только тогда, когда это непосредственно понадобится.

Ты не предложил способа конвертации.

arthur2 писал(а):Описывать в килобайтах диск, размер которого больше двух терабайт - это какая-то редкая форма мазохизма

Это не наше дело. Наше дело — бысть настолько прозрачными, насколько это возможно. Вот есть например текстовые редакторы. В одних можно открыть EXE-файл, поменять единичку на единичку, сохранить, и EXE-файл будет работать. В других, если сделать то же самое, EXE-файл безвозвратно повреждается. Потому что редакторы непредсказуемо обходятся с непечатными символами; авторы подумали: фигали, это же текстовый редактор, кому может понадобиться им редактировать бинарные файлы? Вот авторыпоследних должны гореть в аду, я считаю. Программа должна быть прозрачной и никогда не отвергать и не искажать тех данных, которые по мнению её автора не входят в множество популярных вариантов входных данных.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Пред.След.

Вернуться в Visual Basic 1–6

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

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

    TopList  
cron