6

symfony2エンティティ内で小数の精度とスケールを設定するにはどうすればよいですか?次のように、エンティティの10進データ型を使用して経度フィールドに緯度を定義しました。

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

新しいオブジェクトを永続化すると、小数が正しく保存されます(phpMyAdminで52.406374を確認できます)。ただし、編集フォームを表示する場合、数値は52,406に丸められ、更新後は52.406000としてmysqlに保存されます。おそらく私のDoctrine構成に何か問題がありますが、何がわかりません。

緯度と経度が丸められるのはなぜですか?

解決策を見つけました:

SymfonyのFormコンポーネントは、10進数のフォームフィールドをtype="text"としてレンダリングします。使用する場合:

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

正しくレンダリングされます。コメントからのスレッドは私の問題を説明していません。「floatに変換する」精度のバグはすでに修正されていると思います。小枝テンプレートで緯度を表示していたとき、適切な(丸められていない)値が表示されていました。

4

3 に答える 3

4

symfony の 10 進数型の精度と位取りを設定する方法:

次のように、エンティティに設定します。

protected $mycolumn;
/**
* @ORM\Column(type="decimal", precision=14, scale=8, nullable=true)
*/

これにより、MySQL データベースのデータ型が設定されます。

mycolumn decimal(14,8)

Doctrine 2で小数フィールドタイプを指定するとき、位取りと精度は何を意味しますか?

于 2013-12-20T21:23:42.863 に答える
3

Symfony3.2 では、スケールを使用する必要があります。

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

これは、フィールドが (rounding_mode を介して) 送信された値を丸めるまで許可される小数点以下の桁数を指定します。たとえば、スケールが 2 に設定されている場合、送信された値 20.123 は、たとえば 20.12 に丸められます (rounding_mode によって異なります)。

于 2016-12-16T14:14:32.363 に答える
3

おそらく、問題は教義のマッピングによるものではありません。NumberTypeのこのリファレンス ドキュメントを参照してください。

それはあなたが使うものですか?おそらく精度を変更する必要があります。

于 2012-06-11T11:37:34.537 に答える