我需要将磅转换为公斤,反之亦然 - 并将数字转换为最接近的四分之一(可能是一半)。我需要能够进行转换,进行转换并将其转换回来,并使所有值保持不变。
示例代码:
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”。
答案 0 :(得分:1)
不要在函数本身中进行舍入。尽可能精确。在显示之前仅向右转。
如果在函数中将其四舍五入,则将ROUNDED值放入下一个函数中。如果你继续这样做,你会失去很多精确度,并且你循环得越多就会得到不太精确的结果。
答案 1 :(得分:0)
你的精确度很高。您打印出来的$pounds
将从原始值($i
)转换为具有圆函数的千克,然后返回到具有圆函数的磅; round()
导致您的值收敛。
答案 2 :(得分:0)
您将舍入到小数点后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()。