Number overflow. Attempting to store a number with magnitude larger than supported range

TL;DR — Angka Anda di luar batas DynamoDB. Tipe N menyimpan hingga 38 digit presisi dengan magnitudo antara sekitar 1E-130 dan 9.9999…E+125. Nilai melewati rentang itu — atau yang dengan lebih dari 38 digit signifikan — ditolak dengan exception. Simpan ID besar dan nilai presisi tinggi sebagai string, bukan angka.

Apa artinya

ValidationException: 1 validation error detected: Number overflow. Attempting to store a number with magnitude larger than supported range

Tipe Number DynamoDB adalah desimal dengan rentang terbatas dan 38 digit signifikan. ValidationException ini (HTTP 400) berarti nilai yang Anda kirim melebihi magnitudo itu — atau runtime bahasa mengubah string numerik panjang menjadi angka floating-point yang meluap rentang. Ini tidak dapat dicoba ulang sebagai angka; nilai harus direpresentasikan secara berbeda.

Mengapa itu terjadi

  • Angka yang benar-benar besar — nilai lebih besar dari ~9.9E+125 (atau nilai positif yang lebih kecil magnitudonya dari 1E-130).
  • String numerik panjang di-parse ke float — mis. nomor akun/referensi 120-digit yang dijalankan melalui Number() / parseFloat() menjadi sesuatu seperti 8.04e+126 dan meluap. Ini pemicu dunia nyata yang sering.
  • Lebih dari 38 digit signifikan — tipe Number DynamoDB menyimpan hingga 38 digit presisi, dan melampauinya menghasilkan exception.
  • Nilai yang dihitung (produk, pemangkatan) yang tumbuh melewati rentang.

Bagaimana cara memperbaikinya

  1. Simpan sebagai string (S), bukan angka. Identifier besar, nomor akun, atau hash yang tidak pernah Anda operasikan secara matematis harus menjadi string — ini menghindari batas magnitudo dan batas presisi 38-digit.
  2. Jangan parse string mirip-ID ke angka — simpan referensi 100-digit sebagai string dari ujung ke ujung. Mem-parse-nya ke float adalah yang menghasilkan overflow.
  3. Jaga atribut numerik di dalam rentang — Number DynamoDB mendukung hingga 38 digit presisi dan magnitudo hingga ~9.9E+125. Rancang nilai agar muat, atau pisahkan/skalakan.
  4. Untuk desimal presisi tinggi, teruskan angka sebagai string yang Anda konversi dari tipe desimal Anda (Decimal Python, library big-decimal) agar presisi tidak hilang sebelum mencapai DynamoDB.
  5. Pertahankan leading zero / eksaktitas dengan menyimpan sebagai string — tipe Number menormalkan dan tidak dapat mempertahankan leading zero.

FAQ

Apa batas angka DynamoDB? Tipe Number mendukung hingga 38 digit presisi dan magnitudo dari sekitar 1E-130 hingga 9.9999999999999999999999999999999999999E+125 (positif) dan negatif dari itu. Nilai di luar rentang itu memunculkan "Number overflow."

Bagaimana cara menyimpan angka yang sangat besar di DynamoDB? Simpan sebagai atribut string (S) alih-alih Number (N) jika Anda tidak melakukan aritmetika padanya — ini menghindari batas presisi 38-digit dan batas magnitudo sepenuhnya. Untuk string numerik yang dapat diurutkan, zero-pad agar urutan leksikal cocok dengan urutan numerik.

Kesalahan terkait

Referensi

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

Klien desktop DynamoDB yang cepat dan menjalankan SQL sungguhan yang tidak bisa dijalankan DynamoDB — JOINs, GROUP BY, agregasi — dengan editing visual dan agen AI pada kunci Bedrock milik Anda sendiri.

Uji coba gratis 30 hari, tanpa kartu kredit — lalu paket Free tanpa batas waktu.