4

私は Objective-C を初めて使用するので、MPS を KPH に変換する際に助けが必要です。

以下は、速度のための私の現在の文字列です。誰かが他に何が必要か指摘できますか?

speed.text = newLocation.speed < 0 ? @"N/A": [NSString stringWithFormat:@"%d", (int)newLocation.speed];
4

3 に答える 3

5

m/s から km/h = (m/s) * (60*60)/1000

または 1m/s = 3.6km/h

float speedInKilometersPerHour = newLocation.speed*3.6;
if (speedInKilometersPerHour!=0) {speed.text = [NSString stringWithFormat:@"%f", speedInKilometersPerHour];}
else speed.text = [NSString stringWithFormat:@"No Data Available"];
于 2012-11-11T21:00:54.250 に答える
3

メートル/秒からキロメートル/時を意味し、既存の3値を変更する場合は、これで十分です。

speed.text = (newLocation.speed < 0) ? (@"N/A") : ([NSString stringWithFormat:@"%d", (int)(newLocation.speed*3.6)]);

MPSの元の速度がゼロ未満の場合は適用されません。それ以外の場合は変換されます。

また、より正確になるように、結果を最も近い整数に丸める必要があります。

speed.text = (newLocation.speed < 0) ? (@"N/A") : ([NSString stringWithFormat:@"%d", (int)((newLocation.speed*3.6)+0.5)]);
于 2012-11-11T21:23:45.887 に答える
3

これを行う1つの方法を次に示します(もう少し読みやすいようにフォーマットしました):

if (newLocation.speed < 0)
    speed.text = @"N/A";
else
    speed.text = [NSString stringWithFormat:@"%d", (int)(newLocation.speed * 3.6)];

ただし、ユーザーに表示する前に数値フォーマッタを使用して数値をローカライズされた文字列に変換し、独自のロケールで正しくフォーマットされるようにする必要があることに注意してください。

if (newLocation.speed < 0)
{
    speed.text = @"N/A";
} 
else
{
    int speedKPH                    = (int)(newLocation.speed * 3.6);
    NSNumber *number                = [NSNumber numberWithInt:speedKPH];

    NSNumberFormatter *formatter    = [NSNumberFormatter new];
    formatter.numberStyle           = NSNumberFormatterDecimalStyle;

    speed.text                      = [formatter stringFromNumber:number];
}
于 2012-11-11T21:08:52.987 に答える