这是我提出的代码,我想:
PHP:
$price0 = "356";
$ship0 = "9.9";
$tprice0 = $price0 + $ship0;
$price1 = number_format((float)$price0, 2, '.', '');
$ship1 = number_format((float)$ship0, 2, '.', '');
$tprice1 = number_format((float)$tprice0, 2, '.', '');
if($ship0 == 0) { $shipping1 = '<span class="free">Free Shipping</span>'; } else { $shipping1 = "$$ship1"; }
HTML:
Price: $<?php echo $price1; ?>
Shipping: <?php echo $shipping1; ?>
Total: $<?php echo $tprice?>
这是最佳做法吗? (例如,我使用双美元符号),有没有办法让代码更清洁/更短?
修改 请注意,我希望在同一页面中对多个产品进行此练习,那么有没有办法缩短它?
$price0b = "223";
$ship0b = "5.5";
$tprice0b = $price0b + $ship0b;
$price1b = number_format((float)$price0b, 2, '.', '');
$ship1b = number_format((float)$ship0b, 2, '.', '');
$tprice1b = number_format((float)$tprice0b, 2, '.', '');
if($ship0b == 0) { $shipping1b = '<span class="free">Free Shipping</span>'; } else { $shipping1b = "$$ship1b"; }
EDIT2:
我在这段代码中找不到类错误:
<?php
$price = "356";
$shipping = "0";
$total_price = $price0 + $ship0;
$oNumberFormatter = new NumberFormatter('en_US', NumberFormatter::PATTERN_DECIMAL, '¤ #,##0.00');
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
Price: <?= $oNumberFormatter->format( (float) $price ); ?>
Shipping: <?= !$ship0b ? "<span class=\"free\">Free Shipping</span>" : $oNumberFormatter->format( (float) $shipping ); ?>
Total: <?= $oNumberFormatter->format( (float) $total_price ); ?>
答案 0 :(得分:1)
要将数字格式化为en_US货币格式,您可以创建一个NumberFormatter对象,如下所示:
$oNumberFormatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
在这种情况下,价格将格式化为给定区域设置的正常规则;例如 $ 9.95 代表'en_US`或€9,95 代表'nl_NL'
如果您想要特定的ICU Decimal format,可以使用:
$oNumberFormatter = new NumberFormatter('en_US', NumberFormatter::PATTERN_DECIMAL, '¤ #,##0.00');
格式中的货币符号(¤)会在回显时自动转换为区域设置字符串指定的正确符号;因此,对于'en_US',将使用美元符号( $ ) - 对于'nl_NL'欧元(€)等等。
无论哪种方式,在您的产品展示循环中,要显示格式正确的产品价格,您只需(假设您的产品价格为$price
)使用:
<?= $oNumberFormatter->format( (float) $price); ?>
...以及免费送货插页:
<?= !$shipping ? "<span class=\"free\">Free Shipping</span>" : $oNumberFormatter->format( (float) $shipping ); ?>
NumberFormatter
课程的完整详情位于:http://php.net/manual/en/class.numberformatter.php
只需编辑即可回复评论中的问题
好的,谢谢。你能解释一下你对运输部件做了什么吗?一世 不明白这种格式是如何运作的。另外,如何插入一个 美元符号,如果暂时我将使用免费送货“:number_format((浮动)$ shipping, 2,'。',''); ?&GT; ?
<?=
是<?php echo
我只是使用三元运算符:http://php.net/manual/en/language.operators.comparison.php(稍微向下滚动页面) - 它只是一种基于if(?<)的直接赋值的简写strong>)else(:)表示法:
!$shipping
等同于$shipping == false
等同于$shipping == 0
,因为PHP是松散类型的,所以:
<?= !$shipping ? "<span class=\"free\">Free Shipping</span>" : $oNumberFormatter->format( (float) $shipping ); ?>
......等同于......
<?php
if($shipping == 0) {
echo "<span class=\"free\">Free Shipping</span>";
}
else {
echo $oNumberFormatter->format( (float) $shipping );
}
?>
从字面上输出$
字符串...只需使用非插值字符串文字。 PHP有两种类型的string literal(井,4种带有heredoc
语法)但实际上插值字符串用双引号括起来并解析变量。
<?php
$sWord = "BADGERS";
echo "I like $sWord";
?>
I like BADGERS
而非插值字符串(用撇号括起来)将逐字处理$
- 它不会插入变量:
<?php
$sWord = "BADGERS";
echo 'I like $sWord';
?>
I like $sWord
字面上的结果。
因此,您可以使用带有前缀的美元符号来回显您的货币值,如下所示:
echo '$' . number_format( (float) $shipping, 2, '.', '');
答案 1 :(得分:0)
我很可能会这样做
PHP
$price = "356";
$ship = "9.9";
$tprice = $price + $ship;
HTML
Price: $<?php echo setdecimalPoint($price); ?>
<?php if($ship == 0) { ?>
<span class="free">Free Shipping</span>
<?php }else{ ?>
Shipping: <?php echo setdecimalPoint($shipping); ?>
<?php } ?>
Total: $<?php echo setdecimalPoint($tprice)?>