2012-06-11 56 views
6

如何在symfony2實體內設置小數精度和小數位數?我在使用十進制數據類型在我的實體像這樣的經度字段定義緯度:編輯表單中的十進制小數Symfony2 + Doctrine2

/** 
* @ORM\Column(type="decimal", precision="10", scale="6", nullable=true) 
*/ 
protected $latitude; 

當堅持新對象時,它正確保存十進制(我可以看到在phpMyAdmin 52.406374)。但是,當顯示編輯表單時,數字四捨五入爲52,406,並且在更新之後它以52.406000的形式存儲在mysql中。我的教義配置可能有些問題,但我不知道是什麼。

爲什麼經緯度變圓了?

實測值的溶液:

的Symfony的Form組件呈現小數形式字段類型= 「文本」。使用時:

->add('latitude', 'number', array(
    'precision' => 6, 
)) 

它被正確渲染。來自評論的帖子沒有描述我的問題。 我想他們已經修復了'convert to float'精度的錯誤。 當我在樹枝模板中顯示緯度時,它顯示了正確的(不是四捨五入的)值。

+0

是不是由[this]引起的?(http://stackoverflow.com/questions/5635500/doctrine-2-decimal-can-only-contain-14-digits)? – jkucharovic

回答

2

也許這個問題不是由於你的教條映射。 請參閱NumberType的參考文檔。

這是你使用的?你可能不得不改變精度。

+0

你說得對 - 我已經發布了編輯。 –

+0

哦,對不起...:/ –

+0

你快1分鐘 –

1

在Symfony3.2你應該使用規模:

$builder->add('lat', NumberType::class, array('scale' => 8)); 

這指定多少位小數將被允許到現場提交的值 輪(通過rounding_mode)。例如,如果比例尺 設置爲2,則提交的值20.123將四捨五入爲 示例20.12(取決於您的rounding_mode)。