Помощь в конвертации и округлении - PullRequest
0 голосов
/ 08 июля 2011

Мне нужно перевести фунты в килограммы и наоборот - и округлить число до ближайшей четверти (и, возможно, до половины). Мне нужно иметь возможность выполнить преобразование, принять это преобразование и преобразовать его обратно, и все значения должны быть одинаковыми.

Пример кода:

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

(значение 1 должно было быть 1.25)

Как мне это сделать? Я не ищу точности в преобразовании, очевидно. Мне просто нужно иметь возможность конвертировать эти неточные значения туда и обратно в одно и то же число.

РЕДАКТИРОВАТЬ 1:

Причина этого в том, что я буду позволять пользователям вводить их рост в сантиметрах, метрах или футах / дюймах, а затем сохранять любое введенное значение в сантиметрах (таким образом, первое преобразование). Затем пользователи могут просматривать свою высоту в сантиметрах, метрах или футах / дюймах (таким образом, снова возможное преобразование).

Итак, скажем, пользователь вводит свою высоту в футах / дюймах, мне нужно хранить это в сантиметрах. Затем пользователь может захотеть снова увидеть эту высоту в футах / дюймах - это означает, что мне нужно преобразовать сантиметры обратно в исходное значение в футах / дюймах.

Пользователи, вероятно, будут ограничены вводом и просмотром значений с шагом в четверть. Значение 5'8.25 "является действительным, но не 5'8.39".

Ответы [ 3 ]

1 голос
/ 08 июля 2011

Не округлять в самой функции. Иди как можно точнее. Только вокруг прямо перед отображением.

Если вы округлите его в функциях, то значение ROUNDED будет добавлено в следующую функцию. Если вы продолжите делать это, вы потеряете много точности, и чем меньше вы зацикливаетесь, тем меньше будет результатов.

0 голосов
/ 08 июля 2011

Вы округляете до 0 десятичных знаков, следовательно, 1,25 округляется до 1. Попробуйте удалить функцию round () и посмотрите, что получится.

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

Редактировать

Для изменения вашего комментария: -

$kilograms = convert_pounds_to_kilograms($i);

Кому: -

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

И удалите round () изнутри своих функций.

0 голосов
/ 08 июля 2011

Вы округлили точность. Ваши $pounds, которые вы печатаете, преобразуются из исходного значения ($i) в килограммы с функцией округления, а затем обратно в фунты с функцией округления; round() вызывает сближение ваших значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...