Текст в число

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

Текст в число

Сообщение Чудик » 01.03.2005 (Вт) 0:17

Есть FlexGrid, в который заносятся числа. Они соответсвенно вводятся как текстовые значения. В дальнейшем с ними необходимо выполнить арифметические операции. Для этого требуется предварительно конвертировать введеные текстовые значения в числовые, но при этом надо учесть, что значения как числа являются десятичными дробями. Как добиться требуемой конвертации?
Век живи - век учись!
www.detal-plast.narod.ru

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 01.03.2005 (Вт) 0:26

А Cdbl не пойдет?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 01.03.2005 (Вт) 2:59

dim str as string
dim inte as integer

sub x()
inte = str
end sub

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 01.03.2005 (Вт) 8:14

CDbl - не переводит текстовые значения - выдает ошибку.
Тот вариант, который написал Ramzes тоже не идет из-за несоответствия типов.
Век живи - век учись!
www.detal-plast.narod.ru

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

Сообщение Andrey Fedorov » 01.03.2005 (Вт) 8:41

Ну сделай хотя бы так:

Код: Выделить всё
Debug.Print CVDbl(" 1.234 "), CVDbl(" 45,678 "), CVDbl(" 1,,23")

Public Function CVDbl(s As String) As Variant
    Dim ss As String, sr As String
   
    CVDbl = Null
    ss = Format$(0, ".")
    sr = IIf(ss = ",", ".", ",")
    s = Replace(s, sr, ss)
    On Error Resume Next
    If IsNumeric(s) Then CVDbl = CDbl(s)
End Function
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 01.03.2005 (Вт) 9:28

Классно, мне понравилось. Спасибо!
Век живи - век учись!
www.detal-plast.narod.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.03.2005 (Вт) 19:58

Чудик писал(а):Классно, мне понравилось. Спасибо!

А просто Val не подходил, интересно? :-)
Изображение

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 01.03.2005 (Вт) 21:39

Нет, Val округляет, чего не надо.
Век живи - век учись!
www.detal-plast.narod.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.03.2005 (Вт) 22:30

Чудик писал(а):Нет, Val округляет, чего не надо.
"Не верю!" (с)
Код: Выделить всё
?Val("1.2345")
1,2345
Изображение

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 01.03.2005 (Вт) 23:04

Да, tyomitch, ты прав. У меня тип поля в БД стоял не тот. Но, все равно Val округлает, если вместо точки набрать запитую (причем округляет в низжую сторону).
Так что обрабатывать все равно приходиться.
Век живи - век учись!
www.detal-plast.narod.ru

VAngel
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 81
Зарегистрирован: 13.01.2005 (Чт) 0:10
Откуда: 2:5030

Сообщение VAngel » 01.03.2005 (Вт) 23:40

А если перед val() заменять запятую на точку?
Через replace(string, ",",".",1,1)

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 02.03.2005 (Ср) 14:27

Уж сколько раз твердили миру, что Val() не понимает национальные разделители дробной части... Ну вы бы хоть поиском попробовали!

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.03.2005 (Ср) 15:36

Ennor писал(а):Уж сколько раз твердили миру, что Val() не понимает национальные разделители дробной части...
Имхо это не баг, а фича ;-)
Изображение

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 02.03.2005 (Ср) 15:53

tyomitch писал(а):Имхо это не баг, а фича ;-)

Да, логично - слишком много работы пришлось бы выполнять в одной функции, по большей части ненужной. Получился бы еще один монстр типа Format(). Да и к VB SP6 могли бы поправить, если бы это был действительно баг :).


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

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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 142

    TopList  
cron