C++、Cではdouble、floatタイプをint型に変換し、整列し、精度の問題を失う.

754 ワード

質問:C++では、double、floatタイプをintタイプに変換します.正確には、double、floatタイプを整列させると、次の問題が発生します.
コード:
        double dTemp1=1.0000;

	double dTemp2=5.0000;

	int iTemp1=(int)dTemp1;

	int iTemp2=(int)dTemp2;

結果:
        iTemp1=0;

        iTemp2=4;

理由:
dTemp 1は5.00000ですが、実際には4.999999かもしれません.もちろん整数部分を切り取ると、4になります.
解決方法:
double、floatタイプをCStringまたはstringタイプに変換し(これはあなたの速発環境によって異なります)、intタイプに変換します.ここではVC 6.0のMFCを列にします.
        double dTemp1=4.0000;
	CString sTemp=_T("");
	sDivisor.Format(_T("%0.4f"),dTemp1); 
	int iTemp1=atoi(sTemp);

まとめ:
以上の方法で浮動小数点型データの整列精度の喪失問題を解決することができ、他の言語解決方法にも似ていますが、私もここでは解決策を提供しているだけです.