Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2012, 22:04   #1
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию Val() и формат числа

Здравствуйте, Уважаемые.
Столкнулся вот с такой штукой.
В коде есть строки типа:
Код:
tb_НакладнаяДолгНовыйДоллар = Format(НакладнаяДолгНовыйДоллар, "#,##0")
iN = Val(tb_НакладнаяДолгНовыйДоллар.Value)
Ведутся расчеты на форме, вроде все нормально, все работает.
Но, оказалаось, что на другом компе выдавалась ошибка, форма не считала. Долго не мог понять (по телефону) что от меня хотят, пока не поехал и сам не убедился.
Оказалось что значение "1 500" Val выдавал 1. И такое на двух компах.
Смотрел региональные настройки, ничего не нашел, все также как и на моем компе.
Вышел из положения изменив формат числа т.е.
Код:
tb_НакладнаяДолгНовыйДоллар = Format(НакладнаяДолгНовыйДоллар, "0")
Все заработало, но "гвоздик" остался)).
Может кто сталкивался с таким, подскажите, чтобы знать на дальнейшее.
Спасибо.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 28.03.2012, 22:46   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

По-видимому, в данном случае функция останавливается, т.к. находит в Value пробел с ASCII кодом 160.
Цитата:
"Val stops converting at the first character that cannot be interpreted as a numeric digit, numeric modifier, numeric punctuation, or white space."
motorway вне форума Ответить с цитированием
Старый 28.03.2012, 22:48   #3
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Да, так оно и есть.
Но вопрос в том, что на моем-то компе она работает!! Именно с таким форматом числа.
Вот и хочется разобраться, чтобы не вляпаться в дальнейшем.
Хотя, конечно, если разобраться не получится, просто остановится на формате числа "0", чтобы уже точно на всех компах работало.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 29.03.2012, 09:44   #4
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Не знаю, поможет ли это. Цитата из справки:
Цитата:
Функция Val(Value) служит для преобразования аргумента в числовой тип данных. Функция Val прекращает чтение строки на первом символе, который она не может распознать в качестве части числа. Символы, которые часто рассматриваются в качестве частей числовых значений, типа знака доллара и запятых, не распознаются. Однако, эта функция распознает префикс основания &O (для восьмеричных) и &H (для шестнадцатеричных значений). Пробелы, символы табуляции и символы перевода строк удаляются из значения параметра. Функция Val распознает в качестве разделителя целой и дробной части только точку (.). Если используются другие разделители целой и дробной частей (например в национальных версиях приложений), следует применять для преобразования строки в число функцию CDbl.

Внимание! У функции имеется баг! Например, при вызове функции Val("7.1%") генерируется ошибка Type mismatch. Хотя другие примеры работают нормально: Val("7%") возвращает 7, Val("7.%") возвращает 7, Val("7.0%") возвращает 7
А, вообще, на мой взгляд она какая-то левая, да и медленная к тому же.
Тишина – самый громкий звук

Последний раз редактировалось nerv; 29.03.2012 в 09:47.
nerv вне форума Ответить с цитированием
Старый 29.03.2012, 10:29   #5
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Да, спасибо. Это я читал.
Получается что мой случай т.е.
на одном компе Val("1 500") возвращает 1500
а на другом Val("1 500") возвращает 1
можно, видимо, тоже считать багом этой функции, связанной с какими-то настройками системы.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 29.03.2012, 11:19   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Нда, не нравится у меня ей ChrW(160):

Код:
Sub tt()
Dim x
x = Val("1" & ChrW(160) & "500")
MsgBox x
x = Val("1" & ChrW(32) & "500")
MsgBox x
End Sub
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.03.2012, 12:26   #7
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Цитата:
Нда, не нравится у меня ей ChrW(160):
Аналогично.
а с ChrW(32) все нормально выводит.
Похоже, дело в кодировках.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 29.03.2012, 12:35   #8
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Но ведь можно перед преобразованием на всякий случай попробовать replace.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странный формат числа. Klim Bassenger Microsoft Office Excel 19 23.12.2009 13:37
Формат числа mchip Microsoft Office Word 15 17.11.2009 00:32
Access Формат числа Melamory Microsoft Office Access 1 28.09.2008 17:29
Формат числа в калькуляторе Mint86 Microsoft Office Excel 8 25.07.2008 11:49
формат отрицательного числа zetrix Microsoft Office Excel 0 30.10.2006 18:54