MsgBox Fix(0.3 * 1000)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

MsgBox Fix(0.3 * 1000)

Сообщение Nicky » 13.04.2006 (Чт) 13:27

Может кто объяснить subj?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 13.04.2006 (Чт) 13:30

RTFM



Int, Fix Functions

Returns the integer portion of a number.

Syntax

Int(number)

Fix(number)

The required number argument is a Double or any valid numeric expression. If number contains Null, Null is returned.

Remarks

Both Int and Fix remove the fractional part of number and return the resulting integer value.

The difference between Int and Fix is that if number is negative, Int returns the first negative integer less than or equal to number, whereas Fix returns the first negative integer greater than or equal to number. For example, Int converts -8.4 to -9, and Fix converts -8.4 to -8.

Fix(number) is equivalent to:

Sgn(number) * Int(Abs(number))

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: MsgBox Fix(0.3 * 1000)

Сообщение alibek » 13.04.2006 (Чт) 13:36

Nicky писал(а):Может кто объяснить subj?

Что именно? Что 0.3 -- это бесконечная дробь в двоичной системе?
Lasciate ogni speranza, voi ch'entrate.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 13.04.2006 (Чт) 13:36

Какая здесь, по-твоему, целая часть числа? Ты согласен с 299?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.04.2006 (Чт) 13:38

Целая часть какого числа?
Ты напиши это число в двоичном представлении, многие вопросы исчезнут.
Lasciate ogni speranza, voi ch'entrate.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 13.04.2006 (Чт) 13:42

У меня пишет 300 ;) Так что проблем не вижу.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.04.2006 (Чт) 13:45

Так у тебя наверное атлон.
Lasciate ogni speranza, voi ch'entrate.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 13.04.2006 (Чт) 13:46

2alibek
Ну вот, два различных результата! Не думаю, что у RayShade троичный компьютер

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 13.04.2006 (Чт) 13:48

alibek

Дома Атлон. А я с работы пишу. Тут вполне обычный Р4 :)

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 13.04.2006 (Чт) 13:50

Код: Выделить всё
MsgBox Fix(Round(0.3 * 1000))

Все равно, странно все это...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.04.2006 (Чт) 14:08

А не пробовал Fix(CInt(0.3 * 1000))?
Lasciate ogni speranza, voi ch'entrate.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 13.04.2006 (Чт) 14:19

Тоже гут

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.04.2006 (Чт) 16:22

Nicky писал(а):Все равно, странно все это...


Может пояснишь что странно, а то я так и не въеду :cry:
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 13.04.2006 (Чт) 17:07

Код: Выделить всё
MsgBox Fix(csng(0.3 * 1000))


тебе наверное нужно так :D

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 13.04.2006 (Чт) 17:12

А, понял что имелось в виду:

Код: Выделить всё
? (0.3 * 1000)
300
? Fix(0.3 * 1000)
299
? CDbl(0.3 * 1000)
300
? Fix(CDbl(0.3 * 1000))
300
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 14.04.2006 (Пт) 8:32

Andrey Fedorov писал(а):Может пояснишь что странно, а то я так и не въеду :cry:

Получается, что на утверждение 0.3 * 10 = 3 полагаться нельзя?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 14.04.2006 (Пт) 8:34

Nicky писал(а):Получается, что на утверждение 0.3 * 10 = 3 полагаться нельзя?


Так же как и во всех остальных языках программирования, впрочем.
Работа с плавающими числами везде одинакова.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.04.2006 (Пт) 8:35

Nicky писал(а):Получается, что на утверждение 0.3 * 10 = 3 полагаться нельзя?

Получается, что на утверждение 1/3 = 0.33 полагаться нельзя?
Lasciate ogni speranza, voi ch'entrate.

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 14.04.2006 (Пт) 8:43

Спасибо всем! Понял, что нужно освежить в памяти двоичное представление. Закрываем!

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 14.04.2006 (Пт) 17:29

Интересная подробность: на Пентиуме 4 в IDE пишет 299, в скомпилированном виде 300. Фантастика :)
Моду создают модоки, а распространяют модозвоны.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 14.04.2006 (Пт) 17:38

Какие оптимизации компилирования поставлены? :)

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 14.04.2006 (Пт) 17:45

Optimize for Fast Code. Никаких Advanced Optimizations.
Моду создают модоки, а распространяют модозвоны.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 14.04.2006 (Пт) 23:00

Дурдом!!!

У меня с этим "MsgBox Fix(0.3 * 1000)" счас крышу снесет. Второй день исследую +_+

VB6. ADM Duron 650. WinXP Pro. SP.. хз +_+
1. Создаю обычный проект. В коде формы пишу:
Код: Выделить всё
Private Sub Form_Load()
MsgBox Fix(0.3 * 1000)
End Sub

2. Запускаю по F5. Пишет 300.
3. Закрываю форму. Запускаю прогу опять. Пишет 299!!!!
4. Закрываю VB.
5. Проделываю пункты 1-4.
Результаты - наоборот: сначала 299, потом - 300!

И так - все время!

Что это такое?? Объясните, пожалуйста, "научно-популярно". Я уже боюсь теперь на VB что-то коммерческое писать +_+

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.04.2006 (Пт) 23:25

Lasciate ogni speranza, voi ch'entrate.

AjaxVS
Постоялец
Постоялец
 
Сообщения: 506
Зарегистрирован: 01.12.2004 (Ср) 13:12
Откуда: Donetsk, Battle.Net

Сообщение AjaxVS » 14.04.2006 (Пт) 23:43

Ну и причем тут это?
Я хотел бы прочесть ответ на вопрос - возможно ли предугадать, какое число появится в следующий раз в качестве ответа? И нормально ли, что с виду обычная функция VB напоминает Rnd? +_+

--=GAMER=--
Фиолетовый бот
Фиолетовый бот
Аватара пользователя
 
Сообщения: 810
Зарегистрирован: 22.03.2004 (Пн) 11:29
Откуда: Владивосток

Сообщение --=GAMER=-- » 15.04.2006 (Сб) 4:49

Athlon 64 - без кмпиляции - 299 - с компиляцией - 300

мистика 8) :D
В темноте слепец — самый надежный проводник. В эпоху безумия пусть тебя ведет сумасшедший.

rRenderer Engine
VB Wiki

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.04.2006 (Сб) 4:50

А уточняй числа.
0.3! * 1000
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

_Step_
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 16.11.2005 (Ср) 0:46

Сообщение _Step_ » 15.04.2006 (Сб) 7:35

Вот так всё норм!
MsgBox (Fix(0.3! * 1000))

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.04.2006 (Сб) 9:42

AjaxVS писал(а):Я хотел бы прочесть ответ на вопрос - возможно ли предугадать, какое число появится в следующий раз в качестве ответа? И нормально ли, что с виду обычная функция VB напоминает Rnd? +_+

Просто надо правильно работать с числами с плавающей запятой.
Не If A = B, а If (A - B) < e
Lasciate ogni speranza, voi ch'entrate.

CodeName33
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 297
Зарегистрирован: 01.09.2004 (Ср) 13:25
Откуда: SPb

Сообщение CodeName33 » 17.04.2006 (Пн) 9:41

А у меня

MsgBox Fix(0.3 * 1000)

При первом запуске программы пишет 300, а при последующих 299. После закрытия VB и открытия снова, опять при первом запуске 300, а потом 299...
Программисты не глючат - глючат компиляторы...


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

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

Сейчас этот форум просматривают: SemrushBot и гости: 147

    TopList  
cron