You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP表格从数据库取价并设置英镑货币格式的技术求助

解决PHP中MySQL商品价格格式化为英镑符号的问题

嘿,我来帮你搞定这个价格格式化的问题!先看看你当前代码里的小错误,再给你几个实用的解决方案:

首先修正代码里的语法错误

你输出价格的那一行有引号和分号的使用错误,导致代码无法正常运行:

<td>" '$'.number_format(floatval($row["ProductPrice"]));."</td>

这里的字符串拼接逻辑不对,应该用.来连接字符串,而且分号不该插在中间。


方案1:直接拼接英镑符号(最简单直接)

如果只是需要给价格加上£前缀,不需要复杂的货币格式化规则,直接拼接即可,这种方式不需要依赖系统locale,兼容性最好:

修正后的完整代码片段:

include 'db_connection.php';
$conn = OpenCon();
echo "Connected Successfully";

$sql = "SELECT * FROM Product, Manufacturer Where Product_ID = Manufacturer_ID";
$result = $conn->query($sql);

if ($result->num_rows > 0){
    echo "<table>
            <tr>
                <th>Product ID</th>
                <th>Name</th>
                <th>Product Description</th>
                <th>Price</th>
                <th>Image</th>
                <th>Manufacturer Name</th>
            </tr>";
    while($row = $result->fetch_assoc()){
        // 直接拼接£符号,同时修正字符串拼接语法
        $formattedPrice = '£' . number_format(floatval($row["ProductPrice"]));
        echo "<tr>
                <td>".$row["Product_ID"]."</td>
                <td>".$row["Name"]."</td>
                <td>".$row["Product_Description"]."</td>
                <td>".$formattedPrice."</td>
                <td><img src='images/".$row['ProductImage']."'></td>
                <td>".$row["ManufacturerName"]."</td>
              </tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close();

方案2:使用NumberFormatter(推荐,支持标准货币格式化)

如果需要更规范的货币格式(比如处理小数位、千分位等),推荐使用PHP的Intl扩展中的NumberFormatter,它支持多语言和标准货币规则,而且是PHP新版本推荐的方式(替代已弃用的money_format):

首先确保你的PHP开启了Intl扩展(在php.ini里启用extension=intl),然后修改价格格式化部分:

// 在循环内添加
$price = floatval($row["ProductPrice"]);
// 创建英镑格式的NumberFormatter实例
$formatter = new NumberFormatter('en_GB', NumberFormatter::CURRENCY);
// 格式化价格为英镑格式,比如£500.00(如果有小数的话)
$formattedPrice = $formatter->formatCurrency($price, 'GBP');

把这个替换到方案1中的$formattedPrice赋值部分即可,这种方式会自动按照英国的货币规则处理格式,比如小数位数、分隔符等。


为什么之前的setlocale没生效?

之前你尝试用setlocale(LC_MONETARY, 'en_US'),但一是你设置的是美国区域,对应美元,二是money_format函数(如果用的话)依赖系统安装对应的locale包,很多服务器默认可能没有安装en_GB的locale,所以容易出问题。而直接拼接或者用Intl扩展的方式更可靠。

内容的提问来源于stack exchange,提问作者Lagartist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:35:17