我有一个像这样的价格:
<div>
<label for="price">Price</label>
<input type="hidden" name="price" id="price"/>
<input type="number"
onkeydown="javascript: return event.keyCode == 69 ? false : true"
min="0" step="any"
class="form-control"
value="{{ old('price') }}"
name="price" id="price" placeholder="Price (Ex: 10,00)"/>
</div>
如果用户为求职者介绍“ 10.15”,则$ request-> all()会显示此字段,如:
"price" => "10.15"
但是在数据库中,价格存储为10。我将列价格作为整数。然后,我还有一个页面,可以在其中编辑价格,并且表单字段中的价格显示为“ 10”,但是应该为“ 10.15”。
您知道如何在数据库中存储值“ 10.15”并在编辑页面中显示正确的值“ 10.15”吗?
在控制器中,价格存储在DB中,例如:
'price' => $request->price,
答案 0 :(得分:0)
货币值应存储在数据库中的十进制字段而不是整数中。
答案 1 :(得分:0)
您的数据类型应为Float或double或带有小数点的任何内容以小数点形式显示。整数(通常称为int)是不带小数点的数字。浮点数是浮点数。
因此,在您的mysql数据类型,Javascript和任何语言中,您使用的int不应为int,否则将四舍五入。
尝试将表更改为浮点数,然后重新插入另一个浮点数(已插入的数字不会被影响,因为它们已经四舍五入了),您将看到它现在以浮点数存储点。
但是正如乔纳森(Jonathan)所说,永远不要将货币存储为浮点数,而是将其存储为尽可能小的大小,并在每次需要放置小数点时重新计算。 < / p>
答案 2 :(得分:-2)
更新:似乎很少有人不喜欢它,谷歌快速搜索表明钱应该以最小的单位存储。就美元而言,这意味着几美分。无论如何,堆栈不会让我删除可接受的答案。
如果您的ORM扩展了元素模型,则应在模型中使用getPriceAttribute()和setPriceAttribute($ val)。另外,我不同意其他答案。我会将价格存储为基于便士的整数,然后使用getter和setter产生小数。 (仅供参考:条纹等现代商业解决方案使用的是美分整数,而不是小数)
Product extends Model{
public function getPriceAttribute(){
return $this->attributes['price'] /100;
}
public function setPriceAttribute($val){
$this->attributes['price'] = $val * 100;
}
}
用法:
$myProduct->price = 69.69;
echo $myProduct->price;