Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для secrash63
1 / 1 / 0
Регистрация: 06.02.2017
Сообщений: 31

Убрать округление после расчета в формуле и форматирование текста в DataGrid

31.03.2017, 13:49. Показов 2442. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток товарищи. Прошу помощи. Уже какой день бьюсь с этим, ничего не могу понять.
В определенном моменте кода у меня идет следующий расчет:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
For Z As Integer = 1 To 200
                If Z = 1 Then
                    alfax(Z) = Qt(i) / (Form2.Fop * (Form3.t(i) - tmid(i)))
                Else
                    alfax(Z) = Qt(i) / ((Form3.t(i) - tmid(i)) * (((Math.Tanh(Form2.CC * Math.Sqrt(alfax(Z - 1))) / (Form2.CC * Math.Sqrt(alfax(Z - 1)))) * (Form2.Fp) + Form2.Fmp)))
                End If
 
                If Z > 1 Then
                    delalf = alfax(Z) - alfax(Z - 1)
                End If
 
                If delalf <= 0.005 Then
                    alfa(i) = alfax(Z) And
                        Z = 200
 
                End If
            Next
Это я таким образом сделал итерационное вычисление (лучше ничего не смог придумать)
При таком расчете у меня программа считает только целые числа. По умолчанию у меня этот расчет стоит в цикле, и получается массив данных alfa(i) (40 штук) что я потом выводу в DataGrid. Побывал сделать вывод какого то конкретного элемента массива, все равно на выходе целое число, хотя расчетом на калькуляторе по данной формуле, число далеко не целое.
Подскажите что я не так делаю?

Вот как это выглядит в DataGrid -( колонка обозначенная греческой буквой альфа)
Кликните здесь для просмотра всего текста



И тоже целое округленное число он мне выводит если я делаю просто вывод одного числа из массива в текстбокс.
Кликните здесь для просмотра всего текста


Все остальные формулы ( видно из DataGrid) считает по умолчанию с большим количеством знаков после запятой.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.03.2017, 13:49
Ответы с готовыми решениями:

Как убрать ошибку расчета по формуле
Подскажите, пожалуйста, как убрать ошибку в расчете формулы, если ячейки, из которых берутся значения для расчета, пустые?

Убрать (отключить) форматирование текста
Здравствуйте! В своей программе мне приходится работать с большим текстом в котором встречаются различные символы форматирования,...

Убрать форматирование текста в textEdit
Всем здравствуйте, при создании моей программы у меня возникла такая проблема: https://yadi.sk/i/yj_21pU7_pM6RA Как убрать...

18
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
31.03.2017, 18:21
secrash63
Скажите, как вы объявили массив?
И что происходит в строке 13?
0
 Аватар для secrash63
1 / 1 / 0
Регистрация: 06.02.2017
Сообщений: 31
31.03.2017, 19:28  [ТС]
Так обозначены массивы
VB.NET
1
  Public Qt(40), A(40), alfa(40), alfax(200), delalf, EE(40), tpmid(40), tppmid(40), tppmidt(40), Nu(40) As Double
В строке 12 указано условие, что если разница между текущим значением и предыдущим меньше определенного числа ( это называется сходимостью итерации) то цикл закрывается, и это последнее число и будет являться искомым и тем самым я уже в новый массив (это строка 13), где будет 40 значений этого числа, уже его заношу.
Просто все эти вычисления стоят еще в одном цикле от 1 до 40. В датагриде по 40 строк на каждое значение.
Вот может так вам станет понятней -
Кликните здесь для просмотра всего текста
0
18 / 9 / 4
Регистрация: 04.02.2015
Сообщений: 36
02.04.2017, 17:50
Я бы сделал так:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
    Sub alf(Fop As Double, Fp As Double, Fmp As Double, CC As Double)
        Dim eps As Double = 0.005 'точность итерации
        For i = 1 To 40
            Dim ti As Double = t(i) - tmid(i) 'разность ti-tсрi
            Dim alfaPrev = Qt(i) / (Fop * ti) 'начальное значение alfa
            Dim alfaNext As Double 'очередное значение
            Do 'цикл
                Dim ca = CC * Math.Sqrt(alfaPrev) 'C*sqrt(alfa)
                alfaNext = Qt(i) / ti / (Math.Tanh(ca) / ca * Fp + Fmp) 'вычисляем очередное значение
            Loop While Math.Abs(alfaNext - alfaPrev) > eps 'если разница больше погрешности - продолжаем
            alfa(i) = alfaNext 'закончили
        Next
    End Sub
При этом надо параметры
Form2.Fop = Fop
Form2.CC = CC
Form2.Fp = Fp
Form2.Fmp = Fmp
передавать извне
и массив
Form3.t(i)
объявить Public и сюда не передавать
0
117 / 110 / 31
Регистрация: 05.04.2014
Сообщений: 224
02.04.2017, 18:01
В первом посте 13 + 14 строку я тоже не понял.
Почему бы не сделать после присваивания значения - Exit For
VB.NET
1
2
3
4
                If delalf <= 0.005 Then
                    alfa(i) = alfax(Z) 
                    Exit For
                End If
0
18 / 9 / 4
Регистрация: 04.02.2015
Сообщений: 36
02.04.2017, 18:08
Bidgo, насколько я понял, имелось ввиду присвоение результату вычисленного значения И (!!!) присвоение переменной цикла максимального значения.
Вообще говоря, итерации так не делаются.
0
117 / 110 / 31
Регистрация: 05.04.2014
Сообщений: 224
02.04.2017, 18:12
Имелось ввиду, что после достижения условия delalf <= 0.005 нужно присвоить alfa(i) = alfax(Z) и выйти из цикла z=1 to 200 в цикл первого уровня i=1 to 40.

У Вас же, насколько я понимаю переменной alfa(i) присваивается результат логического сложения "alfax(Z) And Z = 200".
Что означает And в 13-й строке?
0
18 / 9 / 4
Регистрация: 04.02.2015
Сообщений: 36
02.04.2017, 18:16
Цитата Сообщение от Bidgo Посмотреть сообщение
У Вас же, насколько я понимаю переменной alfa(i) присваивается результат логического сложения "alfax(Z) And Z = 200".
Это не у меня, это у ТС.
Имелось ввиду именно это, просто странно реализовано, на обычном языке. Вообще, VB.net даст ошибку на это выражение.
0
117 / 110 / 31
Регистрация: 05.04.2014
Сообщений: 224
02.04.2017, 18:27
sur1966, сорри, ошибся =)
Щас проверил, такая строка в вб.нэт ошибки не выдает.
При логическом сложении проверяется условие Z=200
Если оно верно, то переменной alfa(i) присваивается округленное значение alfax(Z)
Если Z<>200, то присваивается 0.

В любом случае And в 13-й строке не нужен.

П.С. Хотя, да, если Z=200 с новой строки, то ошибка.
ТС подпиливал прогу прямо в браузере на форуме?
0
18 / 9 / 4
Регистрация: 04.02.2015
Сообщений: 36
02.04.2017, 18:51
Этого никто не знает, кроме него самого.
0
 Аватар для secrash63
1 / 1 / 0
Регистрация: 06.02.2017
Сообщений: 31
04.04.2017, 09:51  [ТС]
Цитата Сообщение от Bidgo Посмотреть сообщение
ТС подпиливал прогу прямо в браузере на форуме?
Кликните здесь для просмотра всего текста


Итерацию сделал как мог, сделал вложенный цикл (z=200) поставил условий, при котором цикл и закрывается, а And для того чтобы сразу две операции выполнить при выполнении условия ( вывеси из вложенного цикла необходимую мне величину и закрыть вложенный цикл)
0
 Аватар для secrash63
1 / 1 / 0
Регистрация: 06.02.2017
Сообщений: 31
04.04.2017, 09:53  [ТС]
Прошу прощения конечно что все так сделано не грамотно, ведь к программирования отношения я не имею вообще.
0
 Аватар для secrash63
1 / 1 / 0
Регистрация: 06.02.2017
Сообщений: 31
04.04.2017, 09:56  [ТС]
Цитата Сообщение от Bidgo Посмотреть сообщение
Почему бы не сделать после присваивания значения - Exit For
сделал по твоему совету, все получилось. Просто я и не представлял что так можно выйти из цикла, именно по этому я и делал присвоение счетчика максимального значения.
Кликните здесь для просмотра всего текста
0
 Аватар для secrash63
1 / 1 / 0
Регистрация: 06.02.2017
Сообщений: 31
04.04.2017, 10:02  [ТС]
Уважаемые, прошу еще помощи. Все вычисления у меня в конечном итоге выводятся в датагрид, и вот вопрос, как мне сделать чтобы все выводилось туда в округленном виде, к примеру 4 знака после запятой?
Заполняю датагрид вот так

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
Public Class Form4
    Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim Table1 As New DataTable
 
        Table1.Columns.Add("№")
        Table1.Columns.Add("Hb")
        Table1.Columns.Add("k")
        Table1.Columns.Add("Pкол, кгс/м2")
        Table1.Columns.Add("П")
        Table1.Columns.Add("q")
        Table1.Columns.Add("Gвоз, кг/с")
        Table1.Columns.Add("Gвоз, кг/ч")
        Table1.Columns.Add("tвход,°C")
        Table1.Columns.Add("Tвход,°K")
        Table1.Columns.Add("tвыход,°C")
        Table1.Columns.Add("Tвыход,°K")
        Table1.Columns.Add("tср,°C")
        Table1.Columns.Add("Tср,°K")
        Table1.Columns.Add("Vвоз, м2/с")
        Table1.Columns.Add("λвоз, Вт/(м·К)")
        Table1.Columns.Add("ρвход, кг/м3")
        Table1.Columns.Add("ρвыход, кг/м3")
        Table1.Columns.Add("ρср, кг/м3")
        Table1.Columns.Add("Wвх, м/с")
        Table1.Columns.Add("Wвых, м/с")
        Table1.Columns.Add("Wср, м/с")
        Table1.Columns.Add("Re")
        Table1.Columns.Add("Pраз, Па")
        Table1.Columns.Add("Pтрен, Па")
        Table1.Columns.Add("Ksi")
        Table1.Columns.Add("Dze")
        Table1.Columns.Add("Q, Дж")
        Table1.Columns.Add("t,°C")
        Table1.Columns.Add("α, B")
        Table1.Columns.Add("E, B")
        Table1.Columns.Add("tр.ср, °C")
        Table1.Columns.Add("tп.ср, °C")
        Table1.Columns.Add("Tп.ср, °C")
        Table1.Columns.Add("Nu")
 
 
 
        For i = 1 To 40
            Table1.Rows.Add(New String() {i, Form3.Hb(i), Form3.K(i), Form1.Pkol(i), Form1.П(i), Form1.q(i), Form1.gvoz(i) _
                            , Form1.gvozh(i), Form3.tvxod(i), Form3.tvxodt(i), Form3.tvixod(i), Form3.tvixodt(i), Form1.tmid(i) _
                            , Form1.tmidt(i), Form1.vvoz(i), Form1.λvoz(i), Form1.ρvvxod(i), Form1.ρvvixod(i), Form1.ρvmid(i) _
                            , Form1.wvx(i), Form1.wvix(i), Form1.wmid(i), Form1.Re(i), Form1.Praz(i), Form1.Ptren(i), Form1.Ksi(i) _
                            , Form1.Dzi(i), Form1.Qt(i), Form3.t(i), Form1.alfa(i), Form1.EE(i), Form1.tpmid(i), Form1.tppmid(i) _
                            , Form1.tppmidt(i), Form1.Nu(i)})
 
        Next
        DataGridView1.DataSource = Table1
    End Sub
 
End Class
Побывал настраивать CellStyle в свойствах, результата не дало.
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
04.04.2017, 10:47
Цитата Сообщение от secrash63 Посмотреть сообщение
Побывал настраивать CellStyle в свойствах, результата не дало.
После заполнения назначь формат:
VB.NET
1
2
3
For Each col as DataGridViewColumn in DataGridView1.Columns
    col.DefaultCellStyle.Format = "f4"
Next
0
 Аватар для secrash63
1 / 1 / 0
Регистрация: 06.02.2017
Сообщений: 31
04.04.2017, 11:01  [ТС]
Цитата Сообщение от sur1966 Посмотреть сообщение
Я бы сделал так:
Твой код немного неправильный в том что, уже после первой петли нужно сравнивать не alfaNext - alfaPrev, а альфу следующии - альфу предыдущую ( та что была в прошлой петле как некст), а у тебя идет постоянное сравнение с первой величиной которая не меняется. и СА каждый раз тоже будет меняться, там не всегда от первого альфа, а каждый раз от того числа что в предыдущей петле было

Добавлено через 2 минуты
Цитата Сообщение от ViterAlex Посмотреть сообщение
После заполнения назначь формат:
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
Public Class Form4
    Private Sub Form4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim Table1 As New DataTable
 
        Table1.Columns.Add("№")
        Table1.Columns.Add("Hb")
        Table1.Columns.Add("k")
        Table1.Columns.Add("Pкол, кгс/м2")
        Table1.Columns.Add("П")
        Table1.Columns.Add("q")
        Table1.Columns.Add("Gвоз, кг/с")
        Table1.Columns.Add("Gвоз, кг/ч")
        Table1.Columns.Add("tвход,°C")
        Table1.Columns.Add("Tвход,°K")
        Table1.Columns.Add("tвыход,°C")
        Table1.Columns.Add("Tвыход,°K")
        Table1.Columns.Add("tср,°C")
        Table1.Columns.Add("Tср,°K")
        Table1.Columns.Add("Vвоз, м2/с")
        Table1.Columns.Add("λвоз, Вт/(м·К)")
        Table1.Columns.Add("ρвход, кг/м3")
        Table1.Columns.Add("ρвыход, кг/м3")
        Table1.Columns.Add("ρср, кг/м3")
        Table1.Columns.Add("Wвх, м/с")
        Table1.Columns.Add("Wвых, м/с")
        Table1.Columns.Add("Wср, м/с")
        Table1.Columns.Add("Re")
        Table1.Columns.Add("Pраз, Па")
        Table1.Columns.Add("Pтрен, Па")
        Table1.Columns.Add("Ksi")
        Table1.Columns.Add("Dze")
        Table1.Columns.Add("Q, Дж")
        Table1.Columns.Add("A, xx")
        Table1.Columns.Add("t,°C")
        Table1.Columns.Add("α, B")
        Table1.Columns.Add("α2, B")
        Table1.Columns.Add("A2, xx")
        Table1.Columns.Add("E, B")
        Table1.Columns.Add("tр.ср, °C")
        Table1.Columns.Add("tп.ср, °C")
        Table1.Columns.Add("Tп.ср, °C")
        Table1.Columns.Add("Nu")
 
 
 
        For i = 1 To 40
            Table1.Rows.Add(New String() {i, Form3.Hb(i), Form3.K(i), Form1.Pkol(i), Form1.П(i), Form1.q(i), Form1.gvoz(i) _
                            , Form1.gvozh(i), Form3.tvxod(i), Form3.tvxodt(i), Form3.tvixod(i), Form3.tvixodt(i), Form1.tmid(i) _
                            , Form1.tmidt(i), Form1.vvoz(i), Form1.λvoz(i), Form1.ρvvxod(i), Form1.ρvvixod(i), Form1.ρvmid(i) _
                            , Form1.wvx(i), Form1.wvix(i), Form1.wmid(i), Form1.Re(i), Form1.Praz(i), Form1.Ptren(i), Form1.Ksi(i) _
                            , Form1.Dzi(i), Form1.Qt(i), Form1.A(i), Form3.t(i), Form1.alfa(i), Form1.alfa2(i), Form1.alfaPrev(i), Form1.EE(i), Form1.tpmid(i), Form1.tppmid(i) _
                            , Form1.tppmidt(i), Form1.Nu(i)})
 
        Next
        DataGridView1.DataSource = Table1
 
        For Each col As DataGridViewColumn In DataGridView1.Columns
            col.DefaultCellStyle.Format = "f4"
        Next
 
    End Sub
Не помогло, все также как в предыдущих скринах, очень много цифр после запятой
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
04.04.2017, 12:35
Попробуйте так
VB.NET
1
2
3
For i = 0 To DataGridView1.Columns.Count - 1
    DataGridView1.Columns(i).DefaultCellStyle.Format = "f4"
Next
0
 Аватар для secrash63
1 / 1 / 0
Регистрация: 06.02.2017
Сообщений: 31
04.04.2017, 12:56  [ТС]
Цитата Сообщение от ovva Посмотреть сообщение
Попробуйте так
VB.NET
1
2
3
For i = 0 To DataGridView1.Columns.Count - 1
* * DataGridView1.Columns(i).DefaultCellStyle.Format = "f4"
Next
Тоже никаких изменений.
Кликните здесь для просмотра всего текста
0
117 / 110 / 31
Регистрация: 05.04.2014
Сообщений: 224
04.04.2017, 18:58
Сделай округление при вычислении значений:
VB.NET
1
Re(i) = Math.Round((vmid(i) * Form2.Dekv) / vvoz(i), 4)
Но если эти значения должны использоваться в дальнейшем, то возможно стоит округлять при добавлении в Table1.Rows
VB.NET
1
Table1.Rows.Add(New String() {i, Math.Round(Form3.Hb(i),4), Math.Round(Form3.K(i),4), Math.Round(Form1.Pkol(i),4), ......
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2017, 18:58
Помогаю со студенческими работами здесь

Поиск определенной части текста и выполнение расчета в формуле
Здравствуйте, помоги, пожалуйста, в файле есть данные: необходимо создать формулу расчета, чтобы при совпадении определенной части слова...

Сбивается округление числового формата при добавлении текста после результата
Добрейшего времени суток, господа. Возникла такая проблема в Екселе. В ячейку забита формула, формат ячейки - числовой, с округлением до...

Cохранить форматирование текста после выдачи из БД
Здравствуйте. Добавляю текст в БД через textarea в поле типа TEXT. На странице вывожу с помощью echo. Но если в самом textarea все...

Помогите пожайлуста с подбором согласно результатам формулы в формуле, после расчета выборка и добавление результатов в таблицу
Всем привет! Я новичек в Access и тем более в языках программирования. Но, я учусь... Нужна ваша помощь в создании небольшой базы в...

Округление расчета
Возникла проблема округления данных если сумма 120,110,130.140=150 и 160.170.180.190=200 Константа === ОкругленияПоумолчанию где...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru