Laravel格式化来自DB字段的货币

时间:2014-04-29 13:57:55

标签: laravel formatting decimal currency

我的数据库中有一个名为'value'的字段,其类型为decimal(9,2)。

我正在使用Laravel 4进行编码,我正在尝试使用访问器和更改器来格式化其内容,以包含数千个逗号,并将格式设置为逗号返回小数,这样它将保存到DB没有抛出错误。

实施例: DB值:1234.00 显示值:1,234.00

我想我在使用模型中的以下代码从数据库中读取时已经整理出格式

public function getValueAttribute($value)
{

  if ($value !== NULL)
  {
    return number_format($value, 2);
  }

}

我似乎遇到的问题是在保存时正确设置格式。

public function setValueAttribute($value)
{

  $this->attributes['value'] = floatval(str_replace(',', '.', str_replace('.', '', $value)));

}

这导致超过1000的值删除了逗号并将小数点放在它的位置

实施例: 显示值:1,234.00 DB值:1.23

我是如何使用逗号(英国货币)取值并将其作为小数点正确存储在DB中的任何想法????

谢谢!

3 个答案:

答案 0 :(得分:0)

这可能会起到作用:

public function setValueAttribute($value)
{
    $this->attributes['value'] = floatval(preg_replace('/[^\d.]/', '', $value));
}

答案 1 :(得分:0)

如果这对某人有用,请查看PHP money_format

答案 2 :(得分:0)

试试这个:

public function setValueAttribute($value)
{
    $this->attributes['value'] = preg_replace('/([0-9]{2})$/', ".$1", preg_replace('/[\D]+/','', $value));
}