0

float が int に切り捨てられると、常に float よりも小さい最大数になるといつも思っていました。ただし、float が -0.5 から 0 の間の場合、-1 ではなく 0 に変換されます! どうしてこれなの?これは言語固有ですか?これはobjCで見ています。

4

1 に答える 1

2

簡単に言えば、あなたの理解は実際には正しいということです。

0 は -1 より大きい数値です。

より長いまたはより詳細な答えは、浮動小数点数が整数にどのように変換されるかによって異なります。"0.5" の float に対して "0" ではなく "-1" が必要な場合は、float から負の値を取り除いて整数に切り上げまたは切り下げ、加算 (または乗算) する独自の実装を作成する必要がある場合があります。 a -1、正確には) 負の符号をその上に戻します。

実装の違いをデモするために私が書いたコードを次に示します。

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        // insert code here...
        NSLog(@"Hello, World!");
        float floatNumber = -1.0f;
        for(NSInteger index = 0; index < 20; index++)
        {
            NSLog( @"floatNumber is %4.2f and integer is %d %d", floatNumber, (int) floatNumber, (int)roundf(floatNumber));
            floatNumber+=0.1f;
        }
    }
    return 0;
}

Xcode では、結果は次のようになります。

floatNumber is -1.00 and integer is -1 -1
floatNumber is -0.90 and integer is 0 -1
floatNumber is -0.80 and integer is 0 -1
floatNumber is -0.70 and integer is 0 -1
floatNumber is -0.60 and integer is 0 -1
floatNumber is -0.50 and integer is 0 0
floatNumber is -0.40 and integer is 0 0
floatNumber is -0.30 and integer is 0 0
floatNumber is -0.20 and integer is 0 0
floatNumber is -0.10 and integer is 0 0
floatNumber is 0.00 and integer is 0 0
floatNumber is 0.10 and integer is 0 0
floatNumber is 0.20 and integer is 0 0
floatNumber is 0.30 and integer is 0 0
floatNumber is 0.40 and integer is 0 0
floatNumber is 0.50 and integer is 0 1
floatNumber is 0.60 and integer is 0 1
floatNumber is 0.70 and integer is 0 1
floatNumber is 0.80 and integer is 0 1
floatNumber is 0.90 and integer is 0 1
于 2013-03-04T03:51:30.150 に答える