2015-10-07 89 views
0

我想知道這個特定的驗證行爲,雖然比解決實際生活問題更出於好奇,但我很想知道答案。驗證中的Symfony範圍

實體屬性價格被定義爲:

/** 
* @ORM\Column(name="price", type="float", nullable=false) 
*/ 

在Symfony的manual targeting 2.7,範圍的最低和最高的選項爲「整數」的類型。但實際上使用浮動,它的工作如預期:

#validation.yml 
Project\MyBundle\Entity\Product: 
    properties: 
     price: 
      - Range: 
       min: 0.01 
       max: 12.90 
       minMessage: Price can't be lower than 0,01€ 
       maxMessage: Price can't be lower than 12,90€ 

enter image description here

最大審定工作未做高於12,90在圖片中看到失敗的任何值的任何問題。 分鐘驗證沒有:

輸入0,009將通過驗證雖然是小於0.01。

是否有任何理由,最小值和最大值記錄爲類型:整數,但工作驗證浮點值? 有沒有人有這個問題的有效答案?

+0

胡亂猜測:你在昏迷後舍入到第二位,這樣' 0.009'變成了'0.01'?另一個要考慮的事情是浮點精度。 – k0pernikus

回答

0

價格類型具有精度2點,因此您的數字將被四捨五入

0.009,相當於0.01

+0

formType是貨幣類型,沒有定義「比例」。我也嘗試將數據庫字段更新爲float(6,3),這使我可以直接在mysql中保存0.009。唯一的問題是,如果在Doctrine中我的浮點定義有問題http://stackoverflow.com/questions/7296027/doctrine-2-2-decimal-places-on-a-float –

+0

ORM列註釋有選項「precision 「,」規模「。 第4.3章:[鏈接](http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html)。 – Snoozer