Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
3 / 3 / 0
Регистрация: 14.08.2013
Сообщений: 65
1

Приложение с различными десятичными разделителями

17.05.2017, 09:40. Показов 851. Ответов 8

Author24 — интернет-сервис помощи студентам
Доброе всем утро!

Вопрос возник такой: как правильно написать приложение, в котором будут использоваться разные десятичные разделители, в зависимости от установленного в системе?

Например.
На моём компьютере установлена запятая (",") - работает без ошибок. На втором - точка и тут возникают проблемы...

P.S. принудительно пробовал менять точки на запятые в коде программы в TextBox'ах, но потом отказался от этой идеи - не работает так.

Или предварительно считывать, какой установлен разделитель и уже его применять в коде?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2017, 09:40
Ответы с готовыми решениями:

Проблемы с десятичными разделителями
С днем программистов всех и у меня к вам такой вопрос: Известно, что точку или запятую нужно...

Как работать с TStringList с различными разделителями
Здравствуйте форумчане. Подскажите как работать с TStringList с различными разделителями....

Создать приложение - каталог медиафайлов, с различными функциями просмотра
Здравствуйте. Нужно сделать десктопное приложение - каталог медиа файлов, с различными функциями...

Как создать полноценное приложение на WinApi с различными элементами (textbox.) подскажите книгу
Как создать полноценное приложение на WinApi с различными элементами(checkbox, textbox, button и...

8
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
17.05.2017, 10:51 2
Использовать всегда один разделитель. При преобразовании в число указывать культуру, в которой осуществлять преобразование. Самый удобный вариант - CultureInfo.InvariantCulture.
Цитата Сообщение от Enzo1987 Посмотреть сообщение
принудительно пробовал менять точки на запятые в коде программы в TextBox'ах
Для ввода чисел использовать NumericUpDown
0
3 / 3 / 0
Регистрация: 14.08.2013
Сообщений: 65
17.05.2017, 11:10  [ТС] 3
Цитата Сообщение от ViterAlex Посмотреть сообщение
Для ввода чисел использовать NumericUpDown
При вводе не целых значений (н-р, "0,3") - выдает ошибку или выбивает программу...
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
17.05.2017, 11:40 4
Enzo1987, потому что вводить нужно через точку. Так уж сложилось, что в информатике десятичным разделителем является точка. Отображать ты можешь как угодно, а вот обрабатывать только точку. Ну а если у тебя от этого падает программа, то это проблема программы, а не контрола.
vb.net снисходительно относится к конвертированию между типами данных, но в один прекрасный день эта снисходительность выходит боком.
0
3 / 3 / 0
Регистрация: 14.08.2013
Сообщений: 65
17.05.2017, 12:02  [ТС] 5
ViterAlex, вот в этом и проблемка.
Может лучше принудительно всё на точки менять??
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
17.05.2017, 13:23 6
Цитата Сообщение от Enzo1987 Посмотреть сообщение
Может лучше принудительно всё на точки менять??
Что менять? Разговор ни о чём.
0
117 / 110 / 31
Регистрация: 05.04.2014
Сообщений: 224
17.05.2017, 19:10 7
Когда-то использовал такой код для получения чисел, которые хранятся в базе данных в текстовых полях.
VB.NET
1
2
3
4
5
6
7
8
9
10
    
    Public SysSep = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
 
    Public Function num(ByVal str As String, Optional ByVal dc As Integer = 2) As Decimal
        If str = "" Then str = 0
        If SysSep = "." Then str = Replace(str, ",", ".")
        If SysSep = "," Then str = Replace(str, ".", ",")
        If Not IsNumeric(str) Then str = 0
        num = FormatNumber(str, dc, TriState.UseDefault, TriState.UseDefault, TriState.False)
    End Function
Вызов функции, например, num("0,3", 1)
0,3 может быть передано и как 0.3.
Функция заменяет точку или запятую на системный разделитель. После этого проверяет, является ли полученный результат числом, если нет, то результат выполнения равен 0. И затем преобразует в число с указанным количеством десятичных знаков.
2
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
18.05.2017, 19:18 8
Цитата Сообщение от Enzo1987 Посмотреть сообщение
При вводе не целых значений (н-р, "0,3") - выдает ошибку или выбивает программу..
Не должно ничего выщелкивать. Вы вручную забиваете или через стрелки?
Признаюсь, ни разу с вылетом программы при использовании NUD не сталкивался, несмотря на разные культуры(
0
144 / 132 / 34
Регистрация: 28.02.2014
Сообщений: 159
19.05.2017, 07:34 9
Можно и так попробовать:
VB.NET
1
2
3
4
5
6
7
8
9
        Dim en As New Globalization.CultureInfo(1033)
        Dim ru As New Globalization.CultureInfo(1049)
        Dim DVal As Double
                Select Case True
                    Case Double.TryParse("Значение", Globalization.NumberStyles.AllowDecimalPoint, ru, DVal)
                    Case Double.TryParse("Значение", Globalization.NumberStyles.AllowDecimalPoint, en, DVal)
                    Case Else
                        DVal = Nothing
                End Select
2
19.05.2017, 07:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2017, 07:34
Помогаю со студенческими работами здесь

Работа с десятичными дробями
Ув. господа:) В качестве тренировки написал на Борланде простенький калькулятор, и почти все...

Действия с десятичными дробями
В какую переменную можно считать число? Пример : переменная l = 100/23; ...

Операции с десятичными дробями
Программу я кое-как написал часа за 3. Но, очевидно, совсем не на ту тему, которая подразумевается...

Индексы с двумя десятичными знаками
Привет всем. Это снова я:) Скажите, как провести подстановку в таком случае:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru