2016-07-29 6 views
2

鋳造に問題があります。私はキャストして印刷が容易なJavaの経験があります。鋳造に問題があります。C++

int a = 1; 
System.out.println((double)a); 

このコードは1.0を出力します。

このタイプのメソッドは機能しません。理由はわかりません。

#include <iostream> 
using namespace std; 
int main(){ 
    int a = 1; 
    cout << (double)a; 
    return 0; 
} 

問題は、ここで私の出力は1であり、私は期待したように1.0ではありません。

+6

私はほとんどの実装は末尾のゼロを非表示と信じています。あなたは特定の量の数字をしたい場合は、そのためのいくつかの機能theres、ちょうどそれのための簡単なGoogle検索を具体的に行う。 – Borgleader

+0

これはC++の答えよりもcですが、printf( "%1f"、(double)a);を試してみてください。 – FrankS101

+0

@ FrankS101:私は誰かがC++、Cの方法ではないと聞いた;) – sjsam

答えて

4

のようにゼロを取得しようとすることができます。

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main(){ 
    int a = 1; 
    cout << fixed   // setting notation 
     << setprecision(1) // setting precision 
     << (double)a;  // print data 
    return 0; 
} 

出力(stdout):

1.0 
1

浮動小数点型のcout出力に精度と固定を指定できます。置く:

cout << fixed << setprecision(2); 

あなたのダブルスを印刷する前に。

完全に動作する例:

#include <iostream> 
#include <iomanip> 

using namespace std; 

int main() 
{ 
    int a = 1; 
    cout << fixed << setprecision(2); 
    cout << (double)a << endl; 
    return 0; 
} 
+0

intとして宣言されている場合、それでも小数点は表示されますか? –

+0

いいえ浮動小数点型にのみ適用されます。 – vordhosbn

+0

OPの変数は 'int'として宣言されています。そして、問題は "簡単に**キャスト**とプリントに簡単に"です。 –

1

私にはあなたがintに対してそれを追記端数のデータが失われてしまうので、それはdoubleintを変換しても意味がありません。さらに、@ Borgleaderによると、末尾のゼロはC++に隠れていると思います。あなたがあなたのコードで示したのと同じ方法を使用してcharまたはその逆にintまたはintfloatまたはdoubleを変換することができますしかし

intfloat又はdoubleの場合

  • 、端数データは
    が失われる、すなわち1.2341となるであろう。 intcharの場合
  • 結果の値は、その文字のASCII値が
    即ちA65となるであろうとなり、048なり、その逆に状況97aとなるであろう。

この回答が役に立ちました。

-1

は、あなたは残念ながら、これはあなたが書式設定を制御できていない

std::string str = std::to_string (double(f)); 

C++ 11以降を使用している場合は、文字列に変換することができ、不要な末尾のゼロを生成します。

たとえば、「1.0」の場合、「1」が生成されます。

+4

downvoterではなく、*効率*と呼ばれるものがあります。C++ストリームの浮動小数点数の精度を手動で設定するために文字列に手動で変換する必要はありません。もう一度、この解決策はにおいがあります – WhiZTiM

+0

十分に公正な、私はちょうどそれをする別の方法を提供していた。 – Dillydill123

0

明示的に浮動小数点フォーマットモードを指定しないと、末尾のゼロは保持されません。科学モードまたは固定モードを使用する場合は保持されます。あなたはcoutオブジェクトの精度を設定するsetprecision機能を使用することができ、fixed表記を使用するcoutを設定した後

int a = 1; 

    std::cout << std::fixed; 
    std::cout << std::setprecision(1); 
    std::cout << (double)a << "\n"; 

IDEONE DEMO

+0

'static_cast (a)'ではないはずですか? – Xiobiq

+0

これを参照してくださいhttp://stackoverflow.com/questions/10438249/in-c-what-are-the-differences-between-static-castdoublea-and-doublea – Matt