Почему Firestore хранит суммы в виде строк, а не чисел? - PullRequest
1 голос
/ 28 сентября 2019

Я создал форму, которую пользователь может заполнить.Одно из полей предназначено для суммы, для которой я указал тип как «число».

Форма затем сохраняется как документ в firestore, который сохраняет сумму в виде строки, а не числа.Я пробовал разные методы безуспешно.

Может кто-нибудь объяснить, что не так с моим кодом?

спасибо

HTML

      <form id="create-form">

        <div class="input-field">
          <input type="number" step="0.01" id="amount" required>
          <label for="amount">Amount</label>
        </div>
.... 

JS

....
    db.collection('users').doc(user.uid).collection('items').doc('manual').collection('transactions').add({
      amount: createForm.amount.Value,
      name: createForm.name.value,
      category: createForm.category.value,
      date: createForm.date.value,
      userUID: user.uid
    })
....

1 Ответ

1 голос
/ 28 сентября 2019

Когда вы вводите данные в поле ввода текста в HTML, их значение становится строкой в ​​коде JavaScript (поскольку текстовое поле позволяет вводить все типы значений).

Если вы хотите, чтобы оно сталочисловое значение, вам нужно проанализировать эту строку в число:

parseInt(createForm.amount.Value)

или если пользователю разрешено вводить не целые числа

parseFloat(createForm.amount.Value)

Если вы сделаете это перед передачейзначение для Firestore, оно будет хранить числовое значение вместо строки:

amount: parseFloat(createForm.amount.Value),

Я должен был найти это: type="number" в основном определяет, какую мобильную клавиатуру пользователи увидят для ввода значенияи может повлиять на проверку значения поля на стороне клиента.Но если вы получите доступ к значению в JavaScript, оно все равно будет строкой и, следовательно, потребует преобразования, о котором я упоминал выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...