ERRO NO CALCULO NO TIMERSPAN
Seguindo o seu código criei um Console Application para testar, só que em vez de fazer um loop só somei os valores diretamente, e o resultado foi o esperado, 31:30
No caso o Console.WriteLine funciona de forma idêntica ao String.Format. Eu realmente não vejo como poderia dar errado a conta a menos que os valores de horas estejam negativos, do tipo [Ô]-10:30:00[Ô], mas acredito que não seja o caso, e caso fosse então teria que usar o Math.Truncate pois ele se comporta como o Math.Floor quando o valor é positivo e como o Math.Ceiling quando negativo.
Sub Main()
Dim ValorPositivo = New TimeSpan
Dim ValorNegativo = New TimeSpan
Dim ValorTotal = New TimeSpan
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorNegativo = ValorNegativo + TimeSpan.Parse([Ô]10:30:00[Ô])
ValorNegativo = ValorNegativo + TimeSpan.Parse([Ô]10:30:00[Ô])
Console.WriteLine([Ô]Positivo: {0:00}:{1:00}[Ô], Math.Floor(ValorPositivo.TotalHours), ValorPositivo.Minutes)
Console.WriteLine([Ô]Negativo: {0:00}:{1:00}[Ô], Math.Floor(ValorNegativo.TotalHours), ValorNegativo.Minutes)
ValorTotal = ValorPositivo.Subtract(ValorNegativo)
Console.WriteLine([Ô]Total: {0:00}:{1:00}[Ô], Math.Floor(ValorTotal.TotalHours), ValorTotal.Minutes)
Console.ReadKey()
End Sub
No caso o Console.WriteLine funciona de forma idêntica ao String.Format. Eu realmente não vejo como poderia dar errado a conta a menos que os valores de horas estejam negativos, do tipo [Ô]-10:30:00[Ô], mas acredito que não seja o caso, e caso fosse então teria que usar o Math.Truncate pois ele se comporta como o Math.Floor quando o valor é positivo e como o Math.Ceiling quando negativo.
Citação::
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.
acabei de fazer isso, realmente a soma esta correta, acredito que estava dando erro na compilação em rede, mas agora o problema que me apresenta esta dando é ao comparar o calculo de negativos.
exemplo
positvo 30:00
negativo 20:00
total -10:00 [serial o correto]
mas ele me esta dando 10:-00
vou dar um blackpoint para ver se o erro esta na variavel
conforme a imagem
Citação::
Seguindo o seu código criei um Console Application para testar, só que em vez de fazer um loop só somei os valores diretamente, e o resultado foi o esperado, 31:30Sub Main()
Dim ValorPositivo = New TimeSpan
Dim ValorNegativo = New TimeSpan
Dim ValorTotal = New TimeSpan
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorNegativo = ValorNegativo + TimeSpan.Parse([Ô]10:30:00[Ô])
ValorNegativo = ValorNegativo + TimeSpan.Parse([Ô]10:30:00[Ô])
Console.WriteLine([Ô]Positivo: {0:00}:{1:00}[Ô], Math.Floor(ValorPositivo.TotalHours), ValorPositivo.Minutes)
Console.WriteLine([Ô]Negativo: {0:00}:{1:00}[Ô], Math.Floor(ValorNegativo.TotalHours), ValorNegativo.Minutes)
ValorTotal = ValorPositivo.Subtract(ValorNegativo)
Console.WriteLine([Ô]Total: {0:00}:{1:00}[Ô], Math.Floor(ValorTotal.TotalHours), ValorTotal.Minutes)
Console.ReadKey()
End Sub
No caso o Console.WriteLine funciona de forma idêntica ao String.Format. Eu realmente não vejo como poderia dar errado a conta a menos que os valores de horas estejam negativos, do tipo [Ô]-10:30:00[Ô], mas acredito que não seja o caso, e caso fosse então teria que usar o Math.Truncate pois ele se comporta como o Math.Floor quando o valor é positivo e como o Math.Ceiling quando negativo.
acredito que estou dando muito trabalho ne amigo kkkkkk então eu peguei seu codigo e fiz no teste dentro do consoleline, como diz acima, que o problema nao está na soma o problema é que estou em substrair.
exemplo
total=positivo - negativo(esta correto)
problema é
total=netativo-positivo me apresenta esse erro conforme a imagem em console.
ele devia de ficar assim [Ô] -32:30[Ô] e nao [Ô]-32:-30[Ô]
Coloque isto ValorTotal = (Valor_Negativo).Subtract(valor_Positivo).
Veja o resultado.
Veja o resultado.
Citação::
Coloque isto ValorTotal = (Valor_Negativo).Subtract(valor_Positivo).
Veja o resultado.
Omar, esse calculo esta correto o problema é o reverter o calculo
Citação:ValorTotal = ( valor_Positivo ).Subtract(Valor_Negativo).
seguinte,
preciso saber o total de horas negativas mostrando o simbolo de negativo.conforme acima mencionado
Se precisa ter negativo então faça assim
Desta forma deve funcionar tanto pra positivo quanto pra negativo, da outra eu considerei que seria apenas positivo, e só por via das dúvidas coloquei da mesma forma em todos os lugares, mesmo onde não deve ter nada negativo só para mostrar que o resultado é sempre o correto
Sub Main()
Dim ValorPositivo = New TimeSpan
Dim ValorNegativo = New TimeSpan
Dim ValorTotalPositivo = New TimeSpan
Dim ValorTotalNegativo = New TimeSpan
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorNegativo = ValorNegativo + TimeSpan.Parse([Ô]10:30:00[Ô])
ValorNegativo = ValorNegativo + TimeSpan.Parse([Ô]10:30:00[Ô])
Console.WriteLine([Ô]Positivo: {0:00}:{1:00}[Ô], Math.Truncate(ValorPositivo.TotalHours), Math.Abs(ValorPositivo.Minutes))
Console.WriteLine([Ô]Negativo: {0:00}:{1:00}[Ô], Math.Truncate(ValorNegativo.TotalHours), Math.Abs(ValorNegativo.Minutes))
ValorTotalPositivo = ValorPositivo.Subtract(ValorNegativo)
ValorTotalNegativo = ValorNegativo.Subtract(ValorPositivo)
Console.WriteLine([Ô]Total Positivo: {0:00}:{1:00}[Ô], Math.Truncate(ValorTotalPositivo.TotalHours), Math.Abs(ValorTotalPositivo.Minutes))
Console.WriteLine([Ô]Total Negativo: {0:00}:{1:00}[Ô], Math.Truncate(ValorTotalNegativo.TotalHours), Math.Abs(ValorTotalNegativo.Minutes))
End Sub
Desta forma deve funcionar tanto pra positivo quanto pra negativo, da outra eu considerei que seria apenas positivo, e só por via das dúvidas coloquei da mesma forma em todos os lugares, mesmo onde não deve ter nada negativo só para mostrar que o resultado é sempre o correto
Citação::
Se precisa ter negativo então faça assimSub Main()
Dim ValorPositivo = New TimeSpan
Dim ValorNegativo = New TimeSpan
Dim ValorTotalPositivo = New TimeSpan
Dim ValorTotalNegativo = New TimeSpan
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorPositivo = ValorPositivo + TimeSpan.Parse([Ô]17:30:00[Ô])
ValorNegativo = ValorNegativo + TimeSpan.Parse([Ô]10:30:00[Ô])
ValorNegativo = ValorNegativo + TimeSpan.Parse([Ô]10:30:00[Ô])
Console.WriteLine([Ô]Positivo: {0:00}:{1:00}[Ô], Math.Truncate(ValorPositivo.TotalHours), Math.Abs(ValorPositivo.Minutes))
Console.WriteLine([Ô]Negativo: {0:00}:{1:00}[Ô], Math.Truncate(ValorNegativo.TotalHours), Math.Abs(ValorNegativo.Minutes))
ValorTotalPositivo = ValorPositivo.Subtract(ValorNegativo)
ValorTotalNegativo = ValorNegativo.Subtract(ValorPositivo)
Console.WriteLine([Ô]Total Positivo: {0:00}:{1:00}[Ô], Math.Truncate(ValorTotalPositivo.TotalHours), Math.Abs(ValorTotalPositivo.Minutes))
Console.WriteLine([Ô]Total Negativo: {0:00}:{1:00}[Ô], Math.Truncate(ValorTotalNegativo.TotalHours), Math.Abs(ValorTotalNegativo.Minutes))
End Sub
Desta forma deve funcionar tanto pra positivo quanto pra negativo, da outra eu considerei que seria apenas positivo, e só por via das dúvidas coloquei da mesma forma em todos os lugares, mesmo onde não deve ter nada negativo só para mostrar que o resultado é sempre o correto
Cara Deu Certinho justamente o que eu quero, eu tinha feito mudanças no codigo para melhorar mas esse codigo ficou melhor dentro do meu calculo. Valew amigo
Tópico encerrado , respostas não são mais permitidas