Pregunta

Me estaba haciendo una unidad de prueba en el trabajo y un error peculiar surgido de una de las afirmaciones. Tenga en cuenta que expectedValue y actualValue son ambos dobles.

Assert.AreEqual(expectedValue, actualValue);

La excepción declararon que no eran iguales, la elaboración que "valor esperado: <6.8> valor real:. <6.8>"

El valor esperado es un disco codificado 6,8 y el valor real se formula utilizando los valores de base de datos que van a través de nuestros métodos de clasificación (tales como Equal Records, o Jenks Natural Breaks).

Mi conjetura es que la diferencia es, probablemente, que las mantisas de los 2 valores son hasta similar hasta el bit menos significativo. He actualizado las pruebas para incluir un épsilon de encontrar si los dos valores son lo suficientemente cerca, pero tengo curiosidad por si hay una manera de forzar la mantisa para que coincida con el valor de indicación de si exhibidas esa doble. Hace tal una mantisa existen corrección?

¿Fue útil?

Solución

No estoy del todo seguro de lo que quiere decir forzando la mantisa para que coincida con el valor de la pantalla ... hay son no hay valores dobles que son exactamente 0,1, por ejemplo.

Si quieres algo de código para mostrar el exacta valor de un doble, sin embargo, tengo una archivo DoubleConverter.cs lo que hace que sea fácil:

 double d = 0.1;
 string x = DoubleConverter.ToExactString(d);

Otra alternativa es utilizar el especificador de formato de ida y vuelta ( "r") al convertir un doble a cadena - que garantiza que el resultado no tiene suficiente información para reproducir el mismo valor exacto más tarde. En otras palabras, si x != y, entonces x.ToString("r") != y.ToString("r").

Otros consejos

Se podría convertir tanto en una cadena: actualValue.ToString("0.000") y comparar esas cadenas.

Esto se podría hacer para satisfacer sus necesidades de cerca.

Si desea probar si los valores predeterminados de la pantalla coinciden, compara los valores de la pantalla por defecto:

Assert.AreEqual(expectedValue.ToString(), actualValue.ToString());
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top