VARCHAR SQL包含逗号后如何获得2位小数的数字

时间:2017-03-31 07:55:35

标签: php mysql sql-server

我在网站上显示正确的价格时遇到了一些麻烦。目前我有一行VerkoopPP40,这是VARCHAR输入。在这一行中有一个价格,例如89,59。当我试图获得这些值时,它会做一些意想不到的事情。

****更新****

我刚试过这段代码:

<?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' => '&nbsp;'
], ',.') . " 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));

也没用。还有更多想法吗?

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