Un problema muy simple pero extraño en C#, la programación es la siguiente:
Hoy, un colega descubrió que un valor de campo insertado en la base de datos era 400000,18, que cambió a 400000,19 en la base de datos, y el campo era de tipo flotante. (La siguiente discusión trata sobre punto flotante de precisión simple) Después de buscar información, las operaciones de punto flotante siguen básicamente el estándar de formato IEEE-754. FLOAT se compone de 4 bytes (32 bits): VER EEEE EMMM MMMM MMMM MMMM MMMM. S: El primer bit: indica el positivo y el negativo del número de coma flotante, 1 es un número negativo, 0 es un número positivo E: el número binario del valor después de sumar 127 al exponente M: la base de 24 bits (dado que el bit de signo ha sido marcado con S, solo se almacenan 23 bits). Según la figura anterior, el tipo de punto flotante solo puede tener una precisión de números enteros dentro de 2 ^ 23 como máximo. Sin embargo, dado que el estándar IEEE754 regula la base. formato: es decir, 1.xxxxx en binario, la parte izquierda del punto decimal de la base siempre es 1, aquí, para mejorar la precisión, se omite 1, por lo que en realidad puede tener una precisión de un número entero dentro de 2 ^ 24-1 (es decir, 16777215) como máximo. Se puede ver que la precisión máxima garantizada de los números enteros es de 7 dígitos. En cuanto al procesamiento de lugares decimales, dado que los lugares decimales y los lugares enteros se calculan por separado, y debido al método de conversión único de lugares decimales, puede haber un bucle infinito, lo que determina que los lugares decimales de los puntos flotantes no pueden ser precisos. 100, haciendo punto flotante con decimales La precisión es menor. Hasta ahora, todavía no entiendo por qué el método de convertir a binario multiplicando por 2 y redondeando es tan único...
por bingobird 2010-07-22 Responder (0)
Copiado... ....Admito que no tengo esa habilidad