Files
BiJi/PHP/单位转换.php

72 lines
2.2 KiB
PHP

<?php
/**
* 单位转换工具函数
* 根据用户输入的数值和单位进行转换
* @param float $value 要转换的数值
* @param string $fromUnit 原始单位 (cm, m, km)
* @param string $toUnit 目标单位 (cm, m, km)
* @return float 转换后的数值
* @throws Exception 当提供的单位无效时抛出异常
*/
function unitConversion($value, $fromUnit, $toUnit) {
// 统一转换为小写以忽略大小写差异
$fromUnit = strtolower($fromUnit);
$toUnit = strtolower($toUnit);
// 检查单位是否有效
$validUnits = ['cm', 'm', 'km'];
if (!in_array($fromUnit, $validUnits) || !in_array($toUnit, $validUnits)) {
throw new Exception("无效的单位!请使用 cm、m 或 km");
}
// 如果单位相同,直接返回原值
if ($fromUnit === $toUnit) {
return $value;
}
// 定义转换率(转换到米)
$toMeters = [
'cm' => 0.01, // 厘米到米
'm' => 1, // 米到米
'km' => 1000 // 千米到米
];
// 定义从米转换的率
$fromMeters = [
'cm' => 100, // 米到厘米
'm' => 1, // 米到米
'km' => 0.001 // 米到千米
];
// 转换逻辑:先转换为米,再转换为目标单位
$valueInMeters = $value * $toMeters[$fromUnit];
$convertedValue = $valueInMeters * $fromMeters[$toUnit];
return $convertedValue;
}
/**
* 格式化显示转换结果
* @param float $value 原始数值
* @param string $fromUnit 原始单位
* @param float $result 转换后数值
* @param string $toUnit 目标单位
* @return string 格式化的结果字符串
*/
function formatResult($value, $fromUnit, $result, $toUnit) {
return "{$value} {$fromUnit} = {$result} {$toUnit}";
}
// 示例用法(可选)
/*
try {
// 测试不同转换场景
echo formatResult(100, 'cm', unitConversion(100, 'cm', 'm'), 'm') . "\n";
echo formatResult(1, 'm', unitConversion(1, 'm', 'cm'), 'cm') . "\n";
echo formatResult(5, 'km', unitConversion(5, 'km', 'm'), 'm') . "\n";
echo formatResult(1000, 'm', unitConversion(1000, 'm', 'km'), 'km') . "\n";
} catch (Exception $e) {
echo "错误: " . $e->getMessage() . "\n";
}
*/