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
Respuesta Responder a este mensaje
#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
Respuesta Responder a este mensaje
#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
Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
16/03/2007 - 18:38 | Informe spam
On 16 mrt, 18:07, "Harvey Triana" wrote:
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)




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
Respuesta Responder a este mensaje
#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:
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

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida