正確な」値を得ることは可能でしょうか?

 

ごあいさつ困っていることがあるので助けてほしい。

// 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.45ではなく、0.44と出力される。

 
WePlexus:

そして、もしそうなった場合。

必要な0.45ではなく、0.44と出力される。

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

0.98ではなく、0.098です。:)

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

理由: