ERRO NO CALCULO NO TIMERSPAN

OCELOT 27/03/2017 09:08:52
#472800
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

    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.
COQUITO 27/03/2017 12:17:33
#472807
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
COQUITO 27/03/2017 12:45:29
#472808
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:30

    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.



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[Ô]
OMAR2011 27/03/2017 12:56:13
#472809
Coloque isto ValorTotal = (Valor_Negativo).Subtract(valor_Positivo).
Veja o resultado.
COQUITO 27/03/2017 14:56:40
#472811
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

OCELOT 27/03/2017 22:41:01
#472826
Se precisa ter negativo então faça assim

    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
COQUITO 28/03/2017 03:02:08
#472830
Citação:

:
Se precisa ter negativo então faça assim

    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



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
Página 3 de 3 [27 registro(s)]
Tópico encerrado , respostas não são mais permitidas