Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php和mysql之间转换数字格式_Php_Mysql_Joomla - Fatal编程技术网

在php和mysql之间转换数字格式

在php和mysql之间转换数字格式,php,mysql,joomla,Php,Mysql,Joomla,我确信这是一个非常简单的问题,就像一个放错地方的引语,但我完全被难倒了。我正在使用更新查询将购物车数据输入mysql表,并且在卡余额方面存在一些主要问题。mysql表中的列称为BalanceCurrent,它是一个十进制数(18,2)。在我的php代码中(这是一个定制的Joomla组件,因此有一些Joomla对象和方法,如JFactory和quote),下面是我要做的: $rightNow = date("YmdHis"); $db =& JFactory::getDBO(); $qu

我确信这是一个非常简单的问题,就像一个放错地方的引语,但我完全被难倒了。我正在使用更新查询将购物车数据输入mysql表,并且在卡余额方面存在一些主要问题。mysql表中的列称为BalanceCurrent,它是一个十进制数(18,2)。在我的php代码中(这是一个定制的Joomla组件,因此有一些Joomla对象和方法,如JFactory和quote),下面是我要做的:

$rightNow = date("YmdHis");
$db =& JFactory::getDBO();

$query = "update arrc_Voucher set BalanceCurrent = " . $db->quote(number_format($this->balanceRemaining,2)) . ", UpdateDT = ".$db->quote($rightNow). "  where VoucherNbr = ".$db->quote($this->voucherNbr);
error_log("update query: ".$query);
$db->setQuery($query);  
if (!$db->query()) error_log("error inside updateVoucher: ".$db->stderr());
问题是:$db->quote(数字格式($this->balancemaining,2))。如果没有引号(使用$db->quote围绕值创建),我会得到一个mySQL错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '950.00, UpdateDT = '20100813150330'  where VoucherNbr = '1142100120514884'' at line 1 SQL=update arrc_Voucher set BalanceCurrent = 4,950.00, UpdateDT = '20100813150330'  where VoucherNbr = '1142100120514884'
有了引号,就没有错误,这是产生的SQL语句(打印到错误日志中):

看起来不错,但问题是,当我实际进入数据库时,BalanceCurrent字段现在设置为4.00,而不是4950.00


有什么想法吗?这真是让我心烦。

我想逗号可能是个问题。字段的数据类型是什么


如果您想去除千位分隔符,请尝试:number\u格式($this->balanceRemaining,2,'.'.','')

不要使用
number\u格式()
将数据插入数据库。它是用来显示数据的。对于纯舍入,请使用
round()
函数。

正如我所说,字段(数据库中的列)是十进制的(18,2)。在php中使用number_格式时,数千分隔符是默认值。我不确定是否有办法摆脱它。它是number_format函数中的一个可选参数,但如果您输入全部四个参数,则需要指定一个分隔符。我不确定您是否可以通过将空字符串作为参数来删除分隔符。不过我会试试的。很抱歉我没有很好地阅读你的帖子:试试数字格式($this->balanceemaining,2,','');您需要传递第三个和第四个参数(第三个是十进制字符,第四个是千):
number\u格式($number,2’,”)好的,我刚刚尝试了数字格式($this->balanceRemaining,2,'.',''),它确实有效。谢谢,谢谢,但我们不想去。价值将始终为整美元,而不是美分。我们只需要确保它在数据库中以.00结尾。字段是十进制的,所以这无关紧要。无论您存储
1
1.0
1.00
它们都会导致
1.00
被存储。最好的例子是,当您尝试存储
4950.00
时,它只占用前面的
4
,存储为
4.00
update query: update arrc_Voucher set BalanceCurrent = '4,950.00', UpdateDT = '20100813150508'  where VoucherNbr = '1142100120514884'