"Tam" değeri elde etmek mümkün mü?

 

Selamlar. Bir görevle ilgili yardıma ihtiyacınız var:

// 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

Tüm işlevler 0.1 döndürür. (0.02*4.9) = 0.098 olmasına rağmen ve 0.09 döndürmelidir.

Hesap makinemin tam olarak döndürdüğü değeri tam olarak nasıl elde edeceğimi söyle? :)

 

0,02*4,9=0,098 -- 0,98 değil

ondalık noktadan sonra 2 basamak formatında çıktı alırken -- 0.098 çıktısı yuvarlama kurallarına göre 0.10'a yuvarlanır

3 karakter formatında çıktı alırsanız, tam sayı görüntülenecektir.

 
abolk :

0,02*4,9=0,098 -- 0,98 değil

ondalık noktadan sonra 2 basamak formatında çıktı alırken -- 0.098 çıktısı yuvarlama kurallarına göre 0.10'a yuvarlanır

3 karakter formatında çıktı alırsanız, tam sayı görüntülenecektir.

Teşekkürler, rakamları düzelttim.

Sorun şu ki, ondalık noktadan sonra 2 basamak almanız gerekiyor. :) Neden yuvarlanıyor? Yuvarlama yapmadan ve ondalık noktadan (0.09) sonra sadece 2 basamaklı bir kesirli sayıyı nasıl alabilirsiniz?

 
WePlexus :

Teşekkürler, rakamları düzelttim.

Sorun şu ki, ondalık noktadan sonra 2 basamak almanız gerekiyor. :) Neden yuvarlanıyor? Yuvarlama yapmadan ve ondalık noktadan (0.09) sonra sadece 2 basamaklı bir kesirli sayıyı nasıl alabilirsiniz?

bir dizgeye çevir ve gerekli sayıda karakteri al
 
WePlexus :

Teşekkürler, rakamları düzelttim.

Sorun şu ki, ondalık noktadan sonra 2 basamak almanız gerekiyor. :) Neden yuvarlanıyor? Yuvarlama yapmadan ve ondalık noktadan (0.09) sonra sadece 2 basamaklı bir kesirli sayıyı nasıl alabilirsiniz?

 int a= int ( 0.098 / 0.01 );
   double b=a* 0.01 ;
   Comment ( DoubleToString (b, 2 ));
 
sanyooooook :
bir dizgeye çevir ve gerekli sayıda karakteri al
Ve daha iyi bir yol bilmiyorsun
 
Vinin :
Ve daha iyi bir yol bilmiyorsun
Ve söyle lütfen. :)
 
valeryk :

Ve öyle olsa bile:

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

Ardından çıktıda gerekli 0,45 yerine 0,44 elde ederiz.

 
WePlexus :

Ve öyle olsa bile:

Daha sonra çıktıda gerekli 0,45 yerine 0,44 elde ederiz.

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

0.098, 0.98 değil. :)

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

1 döndürür, ancak tam değeri = 0,09 istedim.

 
Vinin :
Ve daha iyi bir yol bilmiyorsun

Aklıma ilk bu geldi tabi daha kolayları da var.

Bu arada, bu da zor değil, belki daha yavaş çalışır:

   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