【Django】DecimalFieldの使用例とエラーの対処法

 

使用例

    longitude = models.DecimalField(max_digits=9, decimal_places=6)
    latitude = models.DecimalField(max_digits=5, decimal_places=3)

上記にて定義した場合、

  • longitudeは全体の桁数が9桁、そのうち小数点以下は6桁の数値まで代入することが出来る。

例えば「128.259734,-987.456258」はMAXで定義することが出来る。

  • latitudeは全体の桁数が5桁、そのうち小数点以下は3桁の数値まで代入することが出来る。

例えば「36.546,-76.452」はMAXで定義することが出来る。

エラーの対処法

整数部の桁数を0を超えないようにしてください

modelにてDecimalFieldを以下のように設定する。

    longitude = models.DecimalField(max_digits=6, decimal_places=6)
    latitude = models.DecimalField(max_digits=3, decimal_places=3

そして

  • logitudeに158.76459
  • latitudeに36.7549

を代入しようとすると以下のエラーメッセージが帰ってくる。

 "longitude": [
        "整数部の桁数を0を超えないようにしてください。"
    ],
    "latitude": [
        "整数部の桁数を0を超えないようにしてください。"
    ],

整数部の桁数は直接定義することは無いが、「全体の桁数(mac_ditits) – 小数点以下の桁数(decimal_places)」により間接的に導出される。

ですので整数部の桁数を意識して定義する必要がある。

例えば以下のように設定すれば解消される。

    longitude = models.DecimalField(max_digits=8, decimal_places=5)
    latitude = models.DecimalField(max_digits=6, decimal_places=4

‘max_digits’ must be greater or equal to ‘decimal_places’.

max_digitsとdecimal_placesを以下のように設定した時ビルドの時点でエラーが出力される。

    longitude = models.DecimalField(max_digits=3, decimal_places=5)
    latitude = models.DecimalField(max_digits=2, decimal_places=4
'max_digits' must be greater or equal to 'decimal_places'.

間接的に導出される整数部の桁数がマイナス値になってしまうことが分かる。

故にエラーが出力される。

ですので、まずは「max_digits > decimal_places」となるような値を記述すべきである。

以上終わり

コメント

タイトルとURLをコピーしました