Возможно ли получить "точное" значение?

 

Приветствую. Нужна помощь по задаче:

// 0.02 * 4.9 = 0.098
DoubleToStr (0.02 * 4.9, 2); // = 0.1
DoubleToString (0.02 * 4.9, 2); // = 0.1
NormalizeDouble (0.02 * 4.9, 2); // = 0.1

 Все функции возвращают значение 0.1. Хотя (0.02*4.9) = 0.098 и вернуть должно 0.09.

 Подскажите, каким образом получать именно точное значение, которое возвращает мой калькулятор? :)

 

0.02*4.9=0.098 -- а не 0.98

при выводе в формате 2 знака после десятичной точки -- 0.098 выводится округлённым до 0.10 по правилам округления

если выводить в формате 3 знака -- то будет выведено полное число.

 
abolk:

0.02*4.9=0.098 -- а не 0.98

при выводе в формате 2 знака после десятичной точки -- 0.098 выводится округлённым до 0.10 по правилам округления

если выводить в формате 3 знака -- то будет выведено полное число.

Спасибо, поправил цифры.

В том и задача, что требуется взять 2 цифры после запятой. :) Почему округляется? Как можно взять дробное число без округления и только 2 цифры после запятой (0.09)?

 
WePlexus:

Спасибо, поправил цифры.

В том и задача, что требуется взять 2 цифры после запятой. :) Почему округляется? Как можно взять дробное число без округления и только 2 цифры после запятой (0.09)?

переведите в строку и возьмите нужное количество символов
 
WePlexus:

Спасибо, поправил цифры.

В том и задача, что требуется взять 2 цифры после запятой. :) Почему округляется? Как можно взять дробное число без округления и только 2 цифры после запятой (0.09)?

int a=int(0.098/0.01);
   double b=a*0.01;
   Comment(DoubleToString(b,2));
 
sanyooooook:
переведите в строку и возьмите нужное количество символов
А попроще способа не знаете
 
Vinin:
А попроще способа не знаете
А подскажите, пожалуйста. :)
 
valeryk:

А если так:

int a=int((0.09*5)/0.01);
double b=a*0.01;
Comment (DoubleToString (b,2));

То на выходе получаем 0.44, вместо требуемого 0.45.

 
WePlexus:

А если так:

То на выходе получаем 0.44, вместо требуемого 0.45.

int a=int(MathFloor((0.98)/0.001));
   double b=a*0.001;
   Comment(DoubleToString(b,2));
 
valeryk:

0.098, а не 0.98. :)

int a = int (MathFloor ((0.098) / 0.001));
double b = a * 0.001;
Comment (DoubleToString (b, 2));

Восзвращает 1, а хотелось точное значение = 0.09.

 
Vinin:
А попроще способа не знаете

это первое что в голову пришло, конечно есть и по проще.

это кстати тоже не сложное, ну может по медленнее работает:

   int DIGITS=2;
   string stroka=DoubleToString(0.09845,8);
   int P=StringFind(stroka,".");
   Print(stroka);
   stroka=StringSubstr(stroka,0,P+DIGITS+1);
   Print(StringToDouble(stroka));

возвращает:

2014.10.04 11:32:53.731	normalize EURUSD,H4: 0.09
2014.10.04 11:32:53.731	normalize EURUSD,H4: 0.09845000

Причина обращения: