我在网站上显示正确的价格时遇到了一些麻烦。目前我有一行VerkoopPP40
,这是VARCHAR
输入。在这一行中有一个价格,例如89,5
或9
。当我试图获得这些值时,它会做一些意想不到的事情。
****更新****
我刚试过这段代码:
<?php
function formatNumber($number, $format=[], $oldDecimalSeparator=",.·'", $multiplier=1)
{
if ($format) {
$format += ['numOfDecimals' => 0, 'decimalSeparator' => '.', 'thousandSeparator' => '']; # Default format
# Find decimal separator
# The decimal separator is the one that is the last and does not occur more than once
if ($letters = str_replace(' ', '', $number)) { # Replace spaces
if ($letters = preg_replace('/^-/', '', $letters)) { # Remove minus
if ($letters = preg_replace('/[0-9]/', '', $letters)) { # Get all non digits
$lastletter = substr($letters, -1); # Returns last char
if (substr_count($letters, $lastletter) == 1) {
if (strpos($oldDecimalSeparator, $lastletter) !== false)
$oldDecimalSep = $lastletter;
else
return $number;
}
}
}
}
$number = preg_replace('/[^0-9-]/', '', $number); # Remove all non digits except 'minus'
if ($oldDecimalSep)
$number = str_replace($oldDecimalSep, '.', $number); # Format to float
if ($multiplier != 1)
$number = $number * $multiplier;
# Convert float to new format
$number = number_format($number,
$format['numOfDecimals'],
$format['decimalSeparator'],
$format['thousandSeparator']
);
}
return $number;
}
返回:9,00和895,00
所以逗号现在位于不同的位置。这是我猜的......任何人都有想法移动逗号并删除0。
****结束更新****
并像这样回应:
<td><p>vanaf " . formatNumber($number, [
'numOfDecimals' => 2,
'decimalSeparator' => ',',
'thousandSeparator' => ' '
], ',.') . " p.p. <small>Excl btw</small></p></td>
如果我只是echo
它返回的VerkoopPP40
行:€89,5或€9。
所以我用Google搜索了一些,发现了这个:
$var = $row["VerkoopPP40"];
$var = ltrim($var, '0');
$foo = $var;
$prijzen = number_format($foo, 2, ',', '');
这会将.
变为,
。但是对于其中包含9
的行,也会返回9,00欧元。但奇怪的是,其中89.5
的行现在只返回€89,00。因此,代码中的某处将数字向下舍入。
有谁知道如何让价格分别只显示9,00欧元和89,50欧元。
我也尝试了以下代码:
SELECT ROUND(VerkoopPP40,2) AS RoundedPrice
作为数据库查询。那没用。
$prijzen = CAST($prijzen as decimal(2,2));
也没用。还有更多想法吗?
答案 0 :(得分:1)
不知道这对你有帮助,但在PHP文档的评论中找到:“为了防止在最后一个有效小数后面的下一个数字为5时发生的舍入(由几个人提到)......”{ {3}}
$num1 = "89,5";
$num2 = str_replace(',', '.', $num1);
$price = number_format($num2, 2, '.', '');
echo"[ $price ]";
答案 1 :(得分:1)
你应该使用number_format但是以正确的方式让我向你解释 你试过89.5
$prijzen = number_format($foo, 2, ',', '');
但这是为89.5而不是89.5
写的//this will work for you
$var = $row["VerkoopPP40"];
echo 'raw output from database is :'.$var;
$var = $var / 10;
echo 'after this step the number is :'.$var;
$var = number_format($var, 2, '.', '');
echo 'after this step the number is :'.$var;
number_format(输入数字,小数位,&#39;整数和小数之间的分隔符&#39;,&#39;&#39;)