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>";

效果图:

posted @ 2025-03-29 16:31  onestopweb  阅读(22)  评论(0)    收藏  举报