¿Es posible obtener un valor "exacto"? - página 3 1234567 Nuevo comentario Alexandr Bryzgalov 2014.10.04 10:11 #21 abolk: Comprobada su función... deja 0,02.¿Es correcto mi límite?void OnStart() { //--- int DIGITS=2; string stroka=DoubleToString(0.0199999999999,8); int P=StringFind(stroka,"."); Print(stroka); stroka=StringSubstr(stroka,0,P+DIGITS+1); Print(StringToDouble(stroka)); Print(NL(DIGITS,0.0199999999999)); Print(Normalize (0.0199999999999, 2)); } //+------------------------------------------------------------------+ double NL (int DIGITS,double value) { double step=1/MathPow(10,DIGITS); return (MathFloor(value/step)*step); } string Normalize (string Normalize_Parse, int Normalize_Number, string Normalize_Separator = ".") { string Normalize_Before, Normalize_After; for (int i = 0; i <= StringLen (Normalize_Parse) - 1; i ++) { if (StringSubstr (Normalize_Parse, i, StringLen (Normalize_Separator)) == Normalize_Separator) { for (int ii = i + StringLen (Normalize_Separator); ii < i + StringLen (Normalize_Separator) + Normalize_Number; ii ++) { Normalize_After += StringSubstr (Normalize_Parse, ii, 1); } break; } Normalize_Before += StringSubstr (Normalize_Parse, i, 1); } return (Normalize_Before + (Normalize_After > 0 ? Normalize_Separator + Normalize_After : "")); }2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.01 2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.01 2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.02 2014.10.04 11:56:06.199 normalize EURUSD,H4: 0.02000000 Alexandr Bryzgalov 2014.10.04 10:12 #22 WePlexus: ¿Cómo se puede optimizar su función para tomar 0,01 del ejemplode abolk?¿A qué función se refiere?¿primero a través de la cadena o de NL? Andrey F. Zelinsky 2014.10.04 10:13 #23 sanyooooook: y ¿cuál es mi condición para cortarlo bien?tomas mi condición y no la cortas:abolir: como tomar =0.0199999999999999 -- dejar =0.01 Alexandr Bryzgalov 2014.10.04 10:17 #24 abolk: tomas mi condición y no la cortas:son sólo 8 dígitos, el compilador parece normalizar el número 0.0199999999999999 a 0.02por lo que la entrada es 0,02. Alexandr Bryzgalov 2014.10.04 10:18 #25 int DIGITS=2; Print(0.01999999999999999999); string stroka=DoubleToString(0.01999999999999999999,8); int P=StringFind(stroka,"."); Print(stroka); stroka=StringSubstr(stroka,0,P+DIGITS+1); Print(StringToDouble(stroka)); Print(NL(DIGITS,0.01999999999999999999)); Print(Normalize (0.01999999999999999999, 2)); da2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02000000 2014.10.04 12:17:13.637 normalize EURUSD,H4: 0.02 Alexandr Bryzgalov 2014.10.04 10:20 #26 )))), lo siento. doble tiene 15 dígitos significativos y tienes más que vienen Andrey F. Zelinsky 2014.10.04 10:29 #27 sanyooooook: )))), lo siento. doble tiene 15 dígitos significativos y tienes más que vienen Bueno, por fin... hay una discusión constructiva del problema. Andrey F. Zelinsky 2014.10.04 10:32 #28 sanyooooook: )))), lo siento. doble tiene 15 dígitos significativos y tienes más en camino.esta es mi solución:double d=0.01999999999999999; double e=(int)(d*100)/100.0; Print("e=",e); da =0,01y si añades un 9:double d=0.019999999999999999; double e=(int)(d*100)/100.0; Print("e=",e); que es =0,02. Petros Shatakhtsyan 2014.10.04 10:33 #29 abolk: Bueno, por fin... hay una discusión constructiva del problema. Por qué necesitas esto. Desbordamiento de datos. TheXpert 2014.10.04 10:37 #30 abolk: esta es mi solución:d*100Esta operación puede distorsionar el valor numérico 1234567 Nuevo comentario
Comprobada su función... deja 0,02.
¿Es correcto mi límite?
¿Cómo se puede optimizar su función para tomar 0,01 del ejemplode abolk?
¿A qué función se refiere?
¿primero a través de la cadena o de NL?
y ¿cuál es mi condición para cortarlo bien?
tomas mi condición y no la cortas:
como tomar =0.0199999999999999 -- dejar =0.01
tomas mi condición y no la cortas:
son sólo 8 dígitos, el compilador parece normalizar el número 0.0199999999999999 a 0.02
por lo que la entrada es 0,02.
da
)))), lo siento.
doble tiene 15 dígitos significativos y tienes más que vienen
)))), lo siento.
doble tiene 15 dígitos significativos y tienes más que vienen
)))), lo siento.
doble tiene 15 dígitos significativos y tienes más en camino.
esta es mi solución:
da =0,01
y si añades un 9:
que es =0,02.Bueno, por fin... hay una discusión constructiva del problema.
esta es mi solución:
d*100Esta operación puede distorsionar el valor numérico