web-dev-qa-db-ja.com

最も近い整数に丸めることによってfloatをintに変換する方法

floatIntに変換して、最も近い整数に丸める方法はありますか?

24
Sam Jarman

実際、ポール・ベッキンガムの答えは正確ではありません。 -1.51のような負の数を試すと、-2ではなく-1になります。

Math.hの関数round()、roundf()、lround()、およびlroundf()は、負の数値に対しても機能します。

27
ergosys

最も近い値に丸めるには、roundf()を使用し、丸めるにはceilf()を使用し、丸めるにはfloorf()を使用します。うまくいけば、この例は...

#import "math.h"

...

float numberToRound;
int result;

numberToRound = 4.51;

result = (int)roundf(numberToRound);
NSLog(@"roundf(%f) = %d", numberToRound, result); // roundf(4.510000) = 5

result = (int)ceilf(numberToRound);
NSLog(@"ceilf(%f) = %d", numberToRound, result); // ceilf(4.510000) = 5

result = (int)floorf(numberToRound);
NSLog(@"floorf(%f) = %d", numberToRound, result); // floorf(4.510000) = 4


numberToRound = 10.49;

result = (int)roundf(numberToRound);
NSLog(@"roundf(%f) = %d", numberToRound, result); // roundf(10.490000) = 10

result = (int)ceilf(numberToRound);
NSLog(@"ceilf(%f) = %d", numberToRound, result); // ceilf(10.490000) = 11

result = (int)floorf(numberToRound);
NSLog(@"floorf(%f) = %d", numberToRound, result); // floorf(10.490000) = 10


numberToRound = -2.49;

result = (int)roundf(numberToRound);
NSLog(@"roundf(%f) = %d", numberToRound, result); // roundf(-2.490000) = -2

result = (int)ceilf(numberToRound);
NSLog(@"ceilf(%f) = %d", numberToRound, result); // ceilf(-2.490000) = -2

result = (int)floorf(numberToRound);
NSLog(@"floorf(%f) = %d", numberToRound, result); // floorf(-2.490000) = -3

numberToRound = -3.51;

result = (int)roundf(numberToRound);
NSLog(@"roundf(%f) = %d", numberToRound, result); // roundf(-3.510000) = -4

result = (int)ceilf(numberToRound);
NSLog(@"ceilf(%f) = %d", numberToRound, result); // ceilf(-3.510000) = -3

result = (int)floorf(numberToRound);
NSLog(@"floorf(%f) = %d", numberToRound, result); // floorf(-3.510000) = -4

ドキュメント...

https://developer.Apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/roundf.3.html

https://developer.Apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/ceil.3.html

https://developer.Apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/floor.3.html

57
Oliver Pearmain

これはどう:

 float f = 1.51; 
 int i =(int)(f + 0.5); 
4
Paul Beckingham

round()は、floatを最も近いintに丸めることができますが、出力は依然としてfloatです...したがって、round()の出力を整数にキャストしてください:

float input = 3.456;
int result;

result = (int)round(input);

//結果は:3

C++の作業例はこちら

0
Vince K
(int)floor(f+0.5);

これを試して...

0
marichyasana