Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 70
1
.NET 4.x

Программа, написанная на VB.NET не правильно считает на других компьютерах

21.05.2017, 18:27. Просмотров 1865. Ответов 24
Метки нет (Все метки)

Всем добрый день!
Я работаю в сфере строительства и для облегчения расчетов и подготовки документов написал некую программу, которая считает расход материала, площадь, объем и т.д.
У меня на компьютере программа работает идеально, но при установке ее на другие компьютеры коллег - программа выводит расчеты по нолям. При чем на некоторых компьютерах она все-же считает правильно и выдает верный результат.
Я просто ума не приложу почему такое может быть?
Сам я не асс в программировании, скорее это как хобби
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2017, 18:27
Ответы с готовыми решениями:

Программа, написанная в Visual studio 2012 х64 не открывается на других РС
Добрый верер, решил написать простенькую игру на C++ для windows использовал Microsoft Visual...

Будет программа, написанная через Windows Form Application работать на других ОС?
Будет программа, написанная через Windows Form Application работать на других ОС? Я использую...

Программа не работает на других компьютерах
Вообщем для друга писал на ноуте программу.Много времени потратил.Марался с интерфейсом.Но почему...

Моя программа на других компьютерах
Почему когда я напишу какую нибудь программу на с++(проект win 32, не консольное) у меня всё...

24
4362 / 3064 / 1321
Регистрация: 09.05.2015
Сообщений: 7,530
21.05.2017, 18:29 2
Не видя кода программы можно только гада тчо там может быть не так. Например региональные настройки разные на компьютерах, а вы этого не учли...
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 70
21.05.2017, 18:36  [ТС] 3
Ну вот, к примеру фрагмент кода, который при вводе в текстовое поле значения площади - считает расход эмалей

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
        ListBox4.Items.Clear()
        If TextBox3.Text = String.Empty Then
            MsgBox("Укажите площадь поверхности для очистки и АКЗ", vbInformation, "Ошибка!")
        Else
            If Check1 = True Then
                R6 = K6 * Val(TextBox3.Text)
                R6 = Math.Round(R6, 3)
                ListBox4.Items.Add("Абразивный порошок - " & R6 & " т")
                R6 = 0
            End If
 
            If Check2 = True Then
                R7 = K7 * Val(TextBox3.Text)
                R7 = Math.Round(R7, 3)
                ListBox4.Items.Add("Уайт спирит - " & R7 & " кг")
                R7 = 0
            End If
 
            If Check3 = True Then
                R1 = R1 + K1
                On Error Resume Next
                R1 = R1 * Val(TextBox3.Text)
                R1 = Math.Round(R1, 3)
                SolvUR1 = R1 * 0.05 'Расчет количества растворителя Сольв-УР
                ListBox4.Items.Add("Эмаль КО-198 - " & R1 & " кг")
            End If
 
            If Check4 = True Then
                R2 = R2 + K2
                On Error Resume Next
                R2 = R2 * Val(TextBox3.Text)
                R2 = Math.Round(R2, 3)
                SolvUR2 = R2 * 0.05 'Расчет количества растворителя Сольв-УР
                ListBox4.Items.Add("Эмаль Цинотан - " & R2 & " кг")
            End If
 
            If Check5 = True Then
                R3 = R3 + K3
                On Error Resume Next
                R3 = R3 * Val(TextBox3.Text)
                R3 = Math.Round(R3, 3)
                SolvUR3 = R3 * 0.05 'Расчет количества растворителя Сольв-УР
                ListBox4.Items.Add("Эмаль Политон-УР - " & R3 & " кг")
            End If
 
            If Check6 = True Then
                R4 = R4 + K4
                On Error Resume Next
                R4 = R4 * Val(TextBox3.Text)
                R4 = Math.Round(R4, 3)
                SolvUR4 = R4 * 0.05 'Расчет количества растворителя Сольв-УР
                ListBox4.Items.Add("Эмаль Политон-УР(УФ) - " & R4 & " кг")
            End If
 
            If Check7 = True Then
                ResultSolvUR = SolvUR1 + SolvUR2 + SolvUR3 + SolvUR4
                ResultSolvUR = Math.Round(ResultSolvUR, 3)
                ListBox4.Items.Add("Растворитель Сольв-УР - " & ResultSolvUR & " кг")
            End If
        End If
 
        SolvUR1 = 0
        SolvUR2 = 0
        SolvUR3 = 0
        SolvUR4 = 0
        R1 = 0
        R2 = 0
        R3 = 0
        R4 = 0
        ResultSolvUR = 0
0
Модератор
Эксперт .NET
3138 / 2826 / 444
Регистрация: 27.01.2014
Сообщений: 5,204
21.05.2017, 18:59 4
а что такое R1,2,3 и K1,2,3? Какой тип этих переменных?
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 70
21.05.2017, 19:03  [ТС] 5
R1,2,3 это просто переменные, которые при загрузке программы равны 0 и их суть только в том, чтобы конечный результат вывести пользователю.
K1,2,3 это переменные, которые при загрузке программы равны коэффициенту расхода эмали на 1 м2 например:
k1 = 0.15
K2 = 0.18
и т.д.

Тип переменных double
0
4362 / 3064 / 1321
Регистрация: 09.05.2015
Сообщений: 7,530
21.05.2017, 19:22 6
Я бы для начала все Val заменил на православный Double.Parse, т.к. у меня например
при вводе в текстбокс 1.1 Val возвращает 1.1, а при вводе 1,1 возвращает 1
при вводе в текстбокс 0.1 Val возвращает 0.1, а при вводе 0,1 возвращает 0

Double.Parse выдал бы исключение в одном из этих случаев в зависимости от региональных настроек...
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 70
21.05.2017, 19:26  [ТС] 7
Можете пример с double.parse привести на моем примере? А то я никогда никогда не сталкивался с этим
0
688 / 596 / 98
Регистрация: 25.07.2015
Сообщений: 1,142
21.05.2017, 19:31 8
AMG38, для начала я бы посоветовал поменять
оператор преобразования val на явный CDbl, т.к. val понимает в качестве
десятичного разделителя только точку, запятую проигнорит.
T-SQL
1
R4 = R4 * CDbl(TextBox3.Text)
и заменил бы устаревший On Error Resume Next на Try..Catch, глядишь
и какая то ошибка высветится , а не проигнорится.

Добавлено через 57 секунд
Цитата Сообщение от Someone007 Посмотреть сообщение
Я бы для начала все Val заменил на православный Double
опередили
1
4362 / 3064 / 1321
Регистрация: 09.05.2015
Сообщений: 7,530
21.05.2017, 19:32 9
Лучший ответ Сообщение было отмечено AMG38 как решение

Решение

Ну например вот так
vb.net
1
2
3
4
5
6
7
8
9
    R6 = K6 * ParseTextToDouble(TextBox3.Text)
 
    Private Function ParseTextToDouble(text As String) As Double
        Try
            Return Double.Parse(text.Replace(",", "."), System.Globalization.CultureInfo.InvariantCulture)
        Catch ex As Exception
            Return 0 ' в случае если строку невозможно преобразовать в Double вернем 0
        End Try
    End Function
1
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 70
21.05.2017, 19:46  [ТС] 10
Кстати, хотел сказать, чтобы исключить ошибки с вводом запятой в качестве дробного разделителя - я запретил ввод запятой в текстовое поле. Это что-нибудь меняет?

Добавлено через 7 минут
Все равно спасибо за отзывчивость))
0
688 / 596 / 98
Регистрация: 25.07.2015
Сообщений: 1,142
21.05.2017, 19:49 11
Цитата Сообщение от AMG38 Посмотреть сообщение
я запретил ввод запятой в текстовое поле.
Может да, а может и нет.
Предложенный Someone007, вариант -это ведь исправление только одного из возможных косяков.
Исходим из той информации, которую вы нам предоставили...полного кода то мы не видим.
0
4362 / 3064 / 1321
Регистрация: 09.05.2015
Сообщений: 7,530
21.05.2017, 19:49 12
Цитата Сообщение от AMG38 Посмотреть сообщение
я запретил ввод запятой в текстовое поле. Это что-нибудь меняет?
Значит будет работать только на системах, где десятичный разделитель - точка. А где запятая, числа будут округляться 1.1->1; 0.1->0 и т.д.
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 70
21.05.2017, 20:04  [ТС] 13
Цитата Сообщение от Someone007 Посмотреть сообщение
Значит будет работать только на системах, где десятичный разделитель - точка. А где запятая, числа будут округляться 1.1->1; 0.1 > 0 и т.д.
То есть, если проблема в этом, то нужно использовать предложенный Вами вариант решения проблемы?

Добавлено через 6 минут
Цитата Сообщение от Kulma Посмотреть сообщение
Может да, а может и нет.
Предложенный Someone007, вариант -это ведь исправление только одного из возможных косяков.
Исходим из той информации, которую вы нам предоставили...полного кода то мы не видим.
Спасибо, завтра попробую внести изменения в код и запустить на других компьютерах
0
4362 / 3064 / 1321
Регистрация: 09.05.2015
Сообщений: 7,530
21.05.2017, 20:04 14
Цитата Сообщение от AMG38 Посмотреть сообщение
То есть, если проблема в этом, то нужно использовать предложенный Вами вариант решения проблемы?
Может в этом, а может и не в этом, мы же весь код не видели.
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 70
22.05.2017, 11:05  [ТС] 15
Цитата Сообщение от Someone007 Посмотреть сообщение
Может в этом, а может и не в этом, мы же весь код не видели.
Из того, что вы не видели, то это только как присваиваются значения переменным, которые отвечают за коэффициент расхода эмалей...
vb.net
1
2
3
4
5
6
7
        Form1.Enabled = True
        If Me.DialogResult = System.Windows.Forms.DialogResult.OK Then
            K1 = Val(TextBox1.Text)
            K2 = Val(TextBox2.Text)
            K3 = Val(TextBox3.Text)
            K4 = Val(TextBox4.Text)
            K5 = 0.05
Добавлено через 14 часов 54 минуты
Цитата Сообщение от Someone007 Посмотреть сообщение
Значит будет работать только на системах, где десятичный разделитель - точка. А где запятая, числа будут округляться 1.1->1; 0.1->0 и т.д.
Спасибо за дельный совет, действительно проблема заключалась именно в этом.
0
120 / 112 / 30
Регистрация: 28.02.2014
Сообщений: 135
22.05.2017, 11:24 16
Лучший ответ Сообщение было отмечено AMG38 как решение

Решение

Недавно была тема по поводу десятичного разделителя на разных системах, можно немного изменить пример от Someone007:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    R6 = K6 * ParseTextToDouble(TextBox3.Text)
 
    Private Function ParseTextToDouble(text As String) As Double
        Dim en As New Globalization.CultureInfo(1033)
        Dim ru As New Globalization.CultureInfo(1049)
        Dim DVal As Double
                Select Case True
                    Case Double.TryParse(text, Globalization.NumberStyles.AllowDecimalPoint, ru, DVal)
                    Case Double.TryParse(text, Globalization.NumberStyles.AllowDecimalPoint, en, DVal)
                    Case Else
                        DVal = Nothing
                End Select
            Return DVal
    End Function
2
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 70
22.05.2017, 12:18  [ТС] 17
Цитата Сообщение от vova2112 Посмотреть сообщение
Недавно была тема по поводу десятичного разделителя на разных системах, можно немного изменить пример от Someone007:
Спасибо, применил
0
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 52
26.05.2017, 06:55 18
Добавь этот фрагмент при загрузки основной формы
vb.net
1
2
3
4
5
6
' Разделитель целой и дробной цасти
        DecSeporator = My.Computer.Info.InstalledUICulture.NumberFormat.NumberDecimalSeparator
        ' Меняем системный разделитель целой и дробной части
        Dim inf As New CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name)
        System.Threading.Thread.CurrentThread.CurrentCulture = inf
        inf.NumberFormat.NumberDecimalSeparator = "."
0
0 / 0 / 0
Регистрация: 29.08.2016
Сообщений: 70
26.05.2017, 06:58  [ТС] 19
Цитата Сообщение от Qusar Посмотреть сообщение
Добавь этот фрагмент при загрузки основной формы
vb.net
1
2
3
4
5
6
' Разделитель целой и дробной цасти
DecSeporator = My.Computer.Info.InstalledUICulture.NumberFormat.NumberDecimalSeparator
' Меняем системный разделитель целой и дробной части
Dim inf As New CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.Name)
System.Threading.Thread.CurrentThread.CurrentCulture = inf
inf.NumberFormat.NumberDecimalSeparator = "."
Разделитель целой и дробной части меняется только на время выполнения программы?
0
9 / 9 / 0
Регистрация: 25.04.2013
Сообщений: 52
26.05.2017, 06:59 20
Да.
и еще в начало
vb.net
1
Dim DecSeporator As String
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2017, 06:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Не работает программа на других компьютерах
Здравствуйте. Скопипастил написал программу на сокетах (пример взят с учебника), запустил. Всё...

Программа не запускается на других компьютерах
Собственно, по ссылке она и есть http://dropmefiles.com/GipCR . Я и гуглил, и mfc статичными делал...

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

Как правильно вытащить exe файл из си шарпа, чтобы он работал на других компьютерах?
Помогите пожалуйста, я создала Информационную систему на си шарпе (с подключением к SQL). Мне...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.