Pregunta

Tengo una variable TDATETIME que se le asigna un valor en un tiempo de ejecución de 40510.416667. Cuando extrajo el tiempo a una variable de tipo TTime usando la función FRAC, la establece en 0.416666666666. ¿Por qué ha cambiado la precisión del valor y hay un trabajo para retener la precisión del valor original, es decir? Para establecerlo en 0.416667.

¿Fue útil?

Solución

Una de las razones de la pérdida de precisión es que TDATETIME es un doble, y el parámetro y el valor de retorno de FRAC se extienden.

Al convertir puntos flotantes de un tipo a otro, alguno La precisión se puede perder. (Lo mismo ocurre cuando hace aritmética en ellos).

Para comparar el valor flotante correctamente, debe usar la función Comparevalue de la unidad matemática.

Otros consejos

TDATETIME es un número de punto flotante. Algunos números no se pueden representar exactamente como un número de punto flotante. 0.416667 / 0.416666666666 parecería ser otro.

Puede redondear a 5 o 6 dígitos para la pantalla. Eso te da precisión a alrededor de 1 segundo.

Lo que todo informático debe saber sobre los números de punto flotante debería ayudar, al igual que el propio Precisión del punto flotante - Eso le dará información detallada para la respuesta de Jeff.

Gracias por toda su ayuda en esto, muy apreciado. Para obtener mi procedimiento que surgió debido al cambio en la precisión, utilicé la función Comparetime en lugar de los operadores> = o <= para comparar los tiempos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top