Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Esto se debe a que es 0,6, por lo que el 0,5 sólo se obtiene haciendo trampas.
Si se inserta 'v1' en cualquier número, entonces se muestra que se redondea correctamente a 'i = 2'.
Si se inserta 'v1' en cualquier número, se puede ver que hasta 'i = 2' todo se redondea correctamente.
Cuando sólo se normaliza un dígito, es sencillo: 0, 1, 2, 3, 4 -> 0, y 5, 6, 7, 8, 9 -> 1.
Cuando se normalizan dos dígitos, se tienen en cuenta los números de dos cifras: 0 - 49 -> 0, y 50 - 99 -> 1. Al fin y al cabo, si hay que redondear el número 1,49 a enteros, ¿realmente hay que obtener 2, que es 51 centésimas frente a las 49 centésimas disponibles de distancia a 1?
Lo mismo ocurre con los de tres dígitos, los de cuatro dígitos, etc.
Pero 1,45 se redondea a 2, pero sólo si se ha normalizado previamente con un grado de precisión superior.
v1 = 0 = 1.0000000, v2 = 0 = 2.0000000
v1 = 1 = 1.5000000, v2 = 1 = 1.5000000
v1 = 2 = 1,4500000, v2 = 2 = 1,4600000
v1 = 3 = 1.4550000, v2 = 3 = 1.4550000
resulta que si en los cálculos del número se normalizó a una mayor precisión y en los cálculos posteriores para normalizar el número a una menor precisión dará lugar a una diferente de la simplemente normalizado este número a una menor precisión.
resulta que si en el cálculo se normalizó el número con una precisión mayor y en los cálculos posteriores se normaliza el número con una precisión menor, el resultado es diferente al de sólo normalizar el número con una precisión menor.
Disculpe, pero ¿cómo se obtienen los valores que se desean?
Si utilizo las funciones recomendadas, entonces:
- En un caso obtengo un valor correctamente redondeado
0.06-0.02 =NormalizeDouble(0.03999999999999999,2) = 0.04
La división es aproximada y la normalización es necesaria.
- En el segundo caso, también obtengo el redondeo, pero no es necesario en este caso
0.06-0.024 = NormalizeDouble(0.036,2) = 0.04
La normalización (redondeo) no es necesaria aquí.
Pero, ¿cómo puedo normalizar en lugar de redondear?
Disculpe, pero ¿cómo se obtienen los valores que se desean?
Para ello, basta con formular cuáles son los "valores correctos" ))
Si utilizo las funciones recomendadas, entonces:
- En un caso obtengo un valor correctamente redondeado
0,06-0,02 = NormalizarDoble(0,039999999999999,2) = 0,04
La división es aproximada y no se puede prescindir de la normalización.
- En el segundo caso, también obtengo el redondeo, pero no es necesario en este caso
0,06-0,024 = NormalizarDoble(0,036,2) = 0,04
La normalización (redondeo) no es necesaria en este caso.
Pero, ¿cómo puedo normalizar correctamente, en lugar de redondear los valores?
El ejemplo anterior muestra que está utilizando algún algoritmo intuitivo que determina la "corrección" de la normalización. En el primer caso, es una fracción infinita, mientras que en el segundo es una fracción finita. Ajusta tu algoritmo para convertir el número real a la forma deseada.
Aunque lo más fácil es decidir de antemano la precisión que necesita.
Para ello, basta con formular cuáles son los "valores correctos ))
A partir del ejemplo anterior, se puede ver que se está utilizando algún algoritmo intuitivo, por el cual se determina la "necesidad" de la normalización. En el primer caso, es una fracción infinita, mientras que en el segundo es una fracción finita. Ajuste su algoritmo para convertir el número real a la forma deseada.
Aunque lo más fácil es decidir de antemano qué precisión necesita.
Si quiere 0,036 (3 decimales), normalice a 3, no a 2.
Me equivoqué, hasta 3 dígitos deben ser normalizados. ¿Es posible hacerlo?
Me equivoqué, hasta 3 dígitos deben ser normalizados. ¿Funcionará así?
Aquí está su código:
En lugar de 2, pon 3 y será 0,036.