PHP历理 精准处理数学表达式中的小数末尾零
<?php
/**
* 精准处理数学表达式中的小数末尾零
* @param string $expression 原始数学表达式
* @return string 处理后的规范表达式
*/
function formatMathExpression(string $expression): string {
// 正则匹配所有小数(包含整数部分和小数部分)
return preg_replace_callback('/(\d+\.\d+)/', function($matches) {
$numStr = $matches[0];
// 处理类似 "120.60000" → "120.6"
$trimmed = rtrim(rtrim($numStr, '0'), '.');
// 处理类似 "0.0000" → "0" 的情况
return $trimmed === '' ? '0' : $trimmed;
}, $expression);
}
// 原始计算过程
$input = <<<TEXT
三角形的半周长:
= (90.4+80.4+70.4)÷2
= (170.80000+70.4)÷2
= 241.20000÷2
= 120.60000
三角形的面积:
= √{120.60000×(120.60000−90.4)×(120.60000−80.4)×(120.60000−70.4)}
= √{120.60000×30.20000×40.20000×50.20000}
= √{120.60000×1214.04000×50.20000}
= √{120.60000×60944.80800}
= √7349943.84480
= 2711.07798
TEXT;
// 处理计算过程
$output = formatMathExpression($input);
// 格式化输出
echo "<pre>";
echo str_replace(["\r
", "\n"], PHP_EOL, $output);
echo "</pre>";
效果图:


浙公网安备 33010602011771号