ERRO NO CALCULO NO TIMERSPAN

COQUITO 08/03/2017 11:19:38
#472270
Citação:

:
Você precisa fazer manualmente a formatação, ele não vai ter a formatação do jeito que você quer automaticamente

horaFormatada = String.Formar([Ô]{0:00}:{1:00}[Ô], Math.Floor(seuTimeSpan.TotalHours), seuTimeSpan.Minutes)

Aqui é só usar o TotalHours para pegar as horas, porém ele retorna um número quebrado pois inclui minutos e segundos, por exemplo 29.5 representa [Ô]29:30[Ô], então é mais fácil usar o Math.Floor para retornar um número inteiro arredondando para baixo para pegar apenas as horas, então formatando manualmente adicionando os minutos caso existam.



cara vc me deu a ideia que nao lembrava obg. deu certo
COQUITO 15/03/2017 17:20:07
#472461
gente reabri o topico, porque ele esta dando calculou errado.
exemplo

entao quando eu faço o calculo em ambos, ele me esta dando uma hora a mais.
veja

hora: 17:30
hora: 17:30
hora: 10:30
---------------------
total 45:30 é o correto mas ele me esta dando 46:30
ma ideia pessoal

algu

OCELOT 15/03/2017 17:30:29
#472462
Citação:

:
gente reabri o topico, porque ele esta dando calculou errado.
exemplo

entao quando eu faço o calculo em ambos, ele me esta dando uma hora a mais.
veja

hora: 17:30
hora: 17:30
hora: 10:30
---------------------
total 45:30 é o correto mas ele me esta dando 46:30
ma ideia pessoal

algu


Você provavelmente não usou o Math.Floor como eu usei no meu exemplo.

Ele está lá por um motivo importante e você deve ter acabado de descobrir o porque.
COQUITO 15/03/2017 20:34:09
#472465
agora que vi ele esta round. vou ver se fuciona
COQUITO 23/03/2017 12:11:52
#472675
Citação:

:
:
gente reabri o topico, porque ele esta dando calculou errado.
exemplo

entao quando eu faço o calculo em ambos, ele me esta dando uma hora a mais.
veja

hora: 17:30
hora: 17:30
hora: 10:30
---------------------
total 45:30 é o correto mas ele me esta dando 46:30
ma ideia pessoal

algu


Você provavelmente não usou o Math.Floor como eu usei no meu exemplo.

Ele está lá por um motivo importante e você deve ter acabado de descobrir o porque.



opa tava testando a variavel que me repassou, ele deu certo sim entao agora estou com o mesmo problema ao momento eu de subtrair o valor exemplo eu tenho numa coluna TIPO de atividade

registrado como POSITIVA OU NEGATIVA

se eu tenho 4 registros negativas e 6 registro positivos
ele soma os valores certo conforme a imagem acima.
o problema que estou tendo é que ele me apresenta erro do total de horas ao momento que eu faço calculo por exemplo anterior

positiva: 17:30
positiva: 17:30
positiva: 17:30
-------------------
total: 52:30

negativa: 10:30
negativa: 10:30
---------------------
total 21:00

o correto seria 31:30, porem ele me esta retornando 32:30

ja mudei tudo, mesmo assim ele me apresenta esse valor



OCELOT 23/03/2017 14:01:01
#472679
Sem você postar nenhum código não tem como dizer o que está errado. Mas já adianto que o TimeSpan não erra a conta, o mais provável é você arredondando os valores da forma errada para exibir como texto.
COQUITO 24/03/2017 07:15:13
#472702
Citação:

:
Sem você postar nenhum código não tem como dizer o que está errado. Mas já adianto que o TimeSpan não erra a conta, o mais provável é você arredondando os valores da forma errada para exibir como texto.



Provavelmente sim, mas não estou conseguindo achar alguma falha no código
Citação:

Dim valor_Positivo As New TimeSpan(0, 0, 0, 0)
Dim Valor_Negativo As New TimeSpan(0, 0, 0, 0)
Dim ValorTotal As New TimeSpan(0, 0, 0, 0)

Private Sub CalcularHoras()

Try
For Each Linha As DataGridViewRow In Me.dgvRegistros.Rows
If Linha.Cells(3).Value = [Ô]POSITIVA[Ô] Then
[ô]Executa a soma dos valores da coluna 5
valor_Positivo = valor_Positivo + TimeSpan.Parse(Linha.Cells(5).Value)



ElseIf Linha.Cells(3).Value = [Ô]NEGATIVA[Ô] Then
[ô]Executa a soma dos valores da coluna 5
Valor_Negativo = Valor_Negativo + TimeSpan.Parse(Linha.Cells(5).Value)
End If
Next

Me.txtTOTAL_DE_MIN_POSITIVAS.Text = (String.Format([Ô]{0:00}:{1:00}[Ô], Math.Floor(valor_Positivo.TotalHours), valor_Positivo.Minutes))
Me.txtTOTAL_DE_MIN_NEGATIVAS.Text = (String.Format([Ô]{0:00}:{1:00}[Ô], Math.Floor(Valor_Negativo.TotalHours), Valor_Negativo.Minutes))

ValorTotal = (valor_Positivo).Subtract(Valor_Negativo)

Me.txtTOTAL_DE_HORAS_POSITIVA.Text = (String.Format([Ô]{0:00}:{1:00}[Ô], Math.Floor(ValorTotal.TotalHours), ValorTotal.Minutes))

valor_Positivo = Nothing
Valor_Negativo = Nothing
ValorTotal = Nothing

Catch ex As Exception
MsgBox(ex.Message)
End Try

End Sub

COQUITO 25/03/2017 14:04:05
#472756
tentei mudar de math.floor para math.round, mesmo assim quando faço o calculo de negativa para positiva ele me esta dando resposta assim -32: -30
COQUITO 27/03/2017 07:20:26
#472796
UP
OMAR2011 27/03/2017 07:37:36
#472797
O que você deveria fazer é fazer um novo projeto para teste.
Neste projeto apenas um formulário preenchendo o datagriview
e um botão para calcular.
Ai tu vai ver que seu código está correto.
Fiz um teste com ele funcionou de forma satisfatória,
com os mesmos dados da sua postagem.
Página 2 de 3 [27 registro(s)]
Tópico encerrado , respostas não são mais permitidas