2011-07-07 10 views
0

ポンドをキログラムに、またその逆に変換する必要があります。数値を最も近い四半期(場合によっては半分)に丸めます。私は変換を行い、変換を行い、それを元に戻すことができ、すべての値を同じにする必要があります。変換と丸めのヘルプ

サンプルコード:

for ($i = 1; $i <= 100; $i = $i + .25) 
{ 
    $kilograms  = convert_pounds_to_kilograms($i); 
    $pounds  = convert_kilograms_to_pounds($kilograms); 
    $new_kilograms = convert_pounds_to_kilograms($pounds); 

    echo ("$i => $pounds => $kilograms => $new_kilograms<br/>"); 
} 

function convert_pounds_to_kilograms($pounds) 
{ 
    assert(is_numeric($pounds) === TRUE); 

    $kilograms = $pounds * 0.45359237; 

    // Round to the nearest quarter 
    $kilograms = round($kilograms * 4, 0)/4; 

    return $kilograms; 
} 

function convert_kilograms_to_pounds($kilograms) 
{ 
    assert(is_numeric($kilograms) === TRUE); 

    $pounds = $kilograms * 2.20462262185; 

    // Round to the nearest quarter 
    $pounds = round($pounds * 4, 0)/4; 

    return $pounds; 
} 

出力の最初の行が正しい:

1 => 1 => 0.5 => 0.5 

第が正しくない:

1.25 => 1 => 0.5 => 0.5 

(値11.25されている必要があり)

どうすればよいですか?私は明らかに変換の精度を求めていません。私はちょうど同じ数にこれらの不正確な値を前後に変換することができる必要があります。

EDIT 1:

この理由は、私は、ユーザーがセンチ、メートル、またはフィート/インチで自分の身長を入力することができますということである - そして、センチメートルにかかわらず、その入力された値を保存する(したがって、最初の変換)。ユーザーは、センチメートル、メートル、またはフィート/インチのいずれかで高さを表示することができます(したがって、可能な変換です)。

したがって、ユーザーが高さをフィート/インチで入力すると、それをセンチメートル単位で保存する必要があります。その後、ユーザーはその高さをft /インチ単位で再度見たいかもしれません。つまり、センチメートルを元のft /インチ値に戻す必要があります。

ユーザーは、値を入力して4分の1ずつ増分することに限られます。意味、5'8.25 "は有効ですが、5'8.39ではありません"。

答えて

0

小数点以下は0に丸められます。したがって、1.25は1に丸められます。 round()関数を削除して、何が起こるかを確認してください。

http://php.net/manual/en/function.round.php

編集

あなたのコメントの変更に対処するには: - :あなたの関数内から)(

$kilograms = round(convert_pounds_to_kilograms($i), 0); 

とラウンド削除 - に

$kilograms = convert_pounds_to_kilograms($i); 

を。

+0

round()関数を削除しても、正確なコンバージョンを得ることができます。私はこれらの値を最も近い四分の一に丸める必要があることを除いて。 – StackOverflowNewbie

+2

次に、値をユーザーに提示する直前に精度を調整します。この関数でそれを行うと、あなたが見たようにエラーが出るでしょう。 – vascowhite

0

精度を四捨五入しています。印刷している$poundsは、元の値($i)からラウンド関数のキログラムに変換され、ラウンド関数のポンドに戻されます。 round()が値を収束させています。

+0

修正するにはどうすればよいですか?私は四分の一または半分の精度で値を求めたいので、丸める必要があると思います。 – StackOverflowNewbie

1

関数自体を丸めないでください。できるだけ正確に行ってください。あなたがそれを表示する直前にのみラウンド。

関数で四捨五入すると、ROUNDEDの値が次の関数に入ります。これを続けていくと、精度が失われてしまいます。ループを繰り返すほど正確な結果が得られません。