2010-12-13 9 views
2

数値の小数点を得るには?例:
5を取得する方法は1.5ですか?小数点を取得

+0

申し訳ありませんが、私は質問を理解していません。あなたが扱いたいタイプは何ですか?あなたはdoubleを持っていて、カンマの後の10進表現をintにしたいでしょうか? intに5を格納したいとしますか?なぜ5ではなく、50? – Benoit

+0

@Benoit私はドットの後の最初の数字だけに興味があるので。 –

+0

...なぜ「最初の数字がドットの後ろに」必要ですか? –

答えて

4
int result = static_cast<int>(fmod(number, 1)*10); 

EDIT:または単純で、おそらくより速く:

int result = static_cast<int>(number*10)%10; 

EDIT:それはあなたが行うことが負の数のためにも動作させるために:

int result = abs(static_cast<int>(number*10))%10; 
+0

あなたは時間通りに私を殴ってしまった;) – BlackBear

+0

小数点の位置がわからない場合、私は一般的に12.76,164.7,8759.128756などの任意の浮動小数点数についてこの問題を解決する方法を意味しますか? – Rasoul

+0

@Rasoul:このソリューションはどのような状況でも機能し、常に小数点第1桁を与えます。 –

2

はあなたがx=234.537

を持っていると言います

floor(x*10)はあなたに2345を与えます

あなたは、ちょうどそう10

による除算の残りを取得する必要があります。ここでは

int firstDecimal = floor(x*10)%10

+1

'int firstDecimal = floor(x * 10)%10'はコンパイルされません。 'floor'は浮動小数点型ですが、'% 'は非float(int、unsignedなど)を必要とします。 –

+0

私は言語に固有の答えを与えていませんでした。これはかなりの言語でも使用できます。あなたはC + +でいくつかのキャストが必要な場合があります。 – nico

1

(int) (n*10) % 10 
+0

nが負の場合はどうなりますか?それは働くだろうか? – Nawaz

+0

@Nawaz:そうかもしれない。プラットフォーム(ハードウェア)によって異なります。 –

+0

私は同じ考えをしていた! – Nawaz

1

それを行うには素敵な簡単な方法があります。何のマクロ/関数を使用していない負の数で動作するように

int GetFirstDecimalPlace(float f) 
{ 
    const float dp = f - floorf(f); // This simply gives all the values after the 
             // decimal point. 
    return static_cast<int>(dp * 10.0f); // This move the value after the decimal 
              // point to before it and then casts to an 
              // int losing all other decimal places. 
} 
1

方法が呼び出されます:

n < 0 ? (int) (-n * 10) % 10 : (int) (n * 10) % 10 
+0

あまりにも複雑です。 'static_cast ((n> = 0?n:-n)* 10)%10'である可能性があります。しかし、私は何も理由がない、なぜabs()を呼び出さないでください。 –

+0

あなたはそうです、そう簡単です。パフォーマンス上の理由を除いて、abs()にする理由はありませんが、それはごくわずかです。私は、ライブラリではなく、言語によって提供されるツールを使用してその方法を示したかっただけです。ちょっと(int)の代わりにstatic_cast を使用する理由はありますか? –

+0

あなたの答えをありがとう。 just_intの代わりにstatic_intを使用する理由は、明示的キャストが実行されるプログラム内の場所をマークするためです。読みやすくするためです。 –

関連する問題