2017-10-21 5 views
-1

:: coutの上、丸め< <停止フロートC++のstdを使用して出力私のフロートにしようとしたとき、私は問題を取得しています

私は次の値があります。

vector2f = {-32.00234098f, 96.129380f} //takes 2 floats (x, y) 
output: -32.0023:96.1294 

は、私がいる探しています何を:

output: -32.00234098:96.129380 

実際の数値は、小数点第3位(0.003)ように設定する7つの小数点以下の桁数(0.0000007)まで変化することができ、固定数がTで動作しない丸め彼の事件。

私もダブルスに変更してみましたが、無駄にするように変更してみました。

ありがとうございます!

+0

あなたは 'のstd :: fixed'出力マニピュレータを使用する必要があります。 (そしておそらく 'std:setprecision()'マニピュレータも) –

+0

固定されていても、最後の数字は丸められていて、std :: setprecision()メソッドを使うことはできません。 –

+1

'float'は、小数点第7位ではない7桁の小数点以下7桁。必要な出力はそれぞれ10桁と8桁ですので、丸め誤差があります。 –

答えて

4

2つの問題があります。

  1. あなたは<iomanip>を含めるとstd::setprecisionマニピュレータを使用する必要があります。

  2. 精度のレベルを得るには、floatではなくdoubleを使用する必要があります。

 

例えば:

#include <iostream> 
#include <iomanip> 

int main() 
{ 
    auto x = -32.00234098f, y = 96.129380f; 

    std::cout << std::setprecision(8) << std::fixed << x << ":" << y << std::endl; 

    // doubles  
    auto a = -32.00234098, b = 96.129380; 

    std::cout << std::setprecision(8) << std::fixed << a << ":" << b << std::endl; 

} 

出力例:

-32.00234222:96.12937927 
-32.00234098:96.12938000 
+0

私はヘッダーの使用を避けたいと思っていましたが、小数点をはるかに超える精度を得るために使用する必要があります。ありがとう! –

0

std::precisionマニピュレータを使用してストリームの出力精度を設定できます。

出力例のように、末尾のゼロを所定の精度まで印刷するには、std::fixedマニピュレータを使用する必要があります。

+0

これには何が問題なのかよくわかりません。 Upvoted。 – Bathsheba

関連する問題