Casting correcto en operaciones matemáticas con fechas

16/03/2007 - 17:39 por Harvey Triana | Informe spam
Hola -

Hago interpolaciones matemáticas entre tiempo y valores reales, por ejemplo:



Tiempo Valor



t1 v1

t v -?-

t2 v2





Donde t1, t2, v1, v2, y t son conocidos, y se quiere averiguar el valor
correspondiente a v. El valor interpolado para v es el siguiente:



v = (v2 - v1) (t - t1) / (t2 - t1) + v1



Visual Basic clásico resuelve la formala tal cual está escrita (el casting
es automático). C# se más exigente ¿Cómo se escribe el casting para esta
formula?



t1, t2, y t son de tipo DateTime

v1, v2, y v son de tipo float



Gracias por anticipado

<ht />

Preguntas similare

Leer las respuestas

#1 ANT1
16/03/2007 - 17:50 | Informe spam
Hola Harvey.

La verdad es que no puedo responderte pq me sorpende lo que haces. No
llego a entenderlo y me pica la curiosidad.

¿Que clase de dato quieres obtener? Es decir, ¿que valor buscas y que
es cada elemento?(segundos, minutos, ...)

Quizas aclarandome esto te pueda ayduar. No se.

Un saludo
#2 Harvey Triana
16/03/2007 - 18:07 | Informe spam
Humm... Un ejemplo explicito:

private Test()
{
DateTime t1 = new DateTime(2007, 1, 24, 12, 0, 0);
DateTime t2 = new DateTime(2007, 1, 24, 12, 0, 45);
DateTime t = new DateTime(2007, 1, 24, 12, 0, 30);
float v1 = 38F;
float v2 = 42F;
float v;

// La sintaxis de casting es fatal... ¿Cúal es la correcta?
v = (v2 - v1) *
(float)(Convert.ToDouble(t) - Convert.ToDouble(t1)) /
(float)(Convert.ToDouble(t2) - Convert.ToDouble(t1)) + v1;

MessageBox.Show("To t = " + t.ToString() + " v = " +
v.ToString());
}

El mensaje deberia ser: To t = 24/01/07 12:00:30 v = 40.66666667"

(Es un sistema para estimar valores en tiempo de algunos parametros de
ingenieria)

Saludos,
<ht />



"ANT1" escribió en el mensaje
news:
Hola Harvey.

La verdad es que no puedo responderte pq me sorpende lo que haces. No
llego a entenderlo y me pica la curiosidad.

¿Que clase de dato quieres obtener? Es decir, ¿que valor buscas y que
es cada elemento?(segundos, minutos, ...)

Quizas aclarandome esto te pueda ayduar. No se.

Un saludo
#3 ANT1
16/03/2007 - 18:28 | Informe spam
La verdad es que si quieres hacer un casting de la fecha a un float,
no s como se puede hacer ni como es el valor exactamente.

Ahora lo que veo es que la unica diferencia (por lo menos en el
ejemplo que diste) es en los segundos. La propiedad Second del datime
(t.Second, por ejemplo) te devuelve un int con el valor de los
segundos (en el caso de t seria 30). Como no quieras coger esa
propiedad y hacerle un casting a float (que es posible y obtengo el
mismo resultado que tu de 40,6666...), no veo como hacer otra cosa.

Un saludo
#4 Carlos M. Calvelo
16/03/2007 - 18:38 | Informe spam
On 16 mrt, 18:07, "Harvey Triana" wrote:
Mostrar la cita
Hola Harvey,

Mira el método DateTime.Substract(..) y la estructura TimeSpan.

v = (v2 - v1) * t.Subtract(t1).Seconds / t2.Subtract(t1).Seconds +
v1;

Saludos,
Carlos
#5 Harvey Triana
18/03/2007 - 14:35 | Informe spam
Ya la encontré la sintaxis correcta:

v = (v2 - v1) *
(float)(t.Ticks - t1.Ticks) /
(float)(t2.Ticks - t1.Ticks) + v1;

Gracias por sus respuestas.

Atte:
<ht />

"ANT1" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida