0

私の目標は、最初の小数点以下の桁数が 5 以上の場合に、小数点以下の桁数の前に値を追加することです。

例えば:

#include <iostream>
using namespace std;

int main()
{
    float num = 0.5222f;

    cout << (int)num << endl;

    cin.get();
    return 0;
}

意図した結果は 0 ではなく 1 です。期待される結果を得るには、コードをどのように変更すればよいですか?

4

5 に答える 5

4

この値を最も近い整数に丸めたい場合は、0.5int にキャストする前に追加できます。

float num = 0.5222f;
cout << (int)(num + 0.5);

<cmath>または、ヘッダーから次の関数のいずれかを使用することもできます。

double      round  (double x);
float       roundf (float x);
long double roundl (long double x);
于 2013-10-07T16:49:19.450 に答える
3

C++11 ではstd ::roundができたので、これで問題なく動作します:

std::cout << std::round(num) << std::endl;

も含める必要があります<cmath>floorを使用した非C++11メソッド:

std::cout << floor(num + 0.5) << std::endl;
于 2013-10-07T16:52:30.333 に答える
1

floataを anにキャストすると、intゼロに向かって丸められ、数値の小数部分が削除されます。

あなたがしたいことは、roundf最初に電話することです。(roundダブルroundf用、フロート用)

cout << (int)roundf(num) << endl;
于 2013-10-07T16:49:47.900 に答える
0

追加するだけです:

float num = 0.5222f;
cout << std::floor(num + 0.5);

このようにして、(たとえば)最初の桁が> 3の場合も切り上げることを決定できます

float num = 0.3222f;
cout << std::floor(num + 0.7);

どれだけ役立つかはわかりませんが....できます!

于 2013-10-07T16:58:17.410 に答える
-2

ceil 関数を試してください。0.5 の数値を 1 で 10 進数に切り上げます。

http://en.cppreference.com/w/cpp/numeric/math/ceil

于 2013-10-07T16:50:35.377 に答える