Sqlite: усекает число с плавающей точкой при расчете [дубликат]

Решения здесь:

  1. Используйте None в качестве значения по умолчанию (или nonce object) и включите его, чтобы создать свои значения во время выполнения; или
  2. Используйте параметр lambda в качестве параметра по умолчанию и вызовите его в блоке try, чтобы получить значение по умолчанию (это то, что требуется для лямбда-абстракции).

Второй вариант хорош, потому что пользователи функции могут проходить в вызываемом, который может уже существовать (например, type)

58
задан Ken White 29 November 2011 в 05:56
поделиться

4 ответа

Просто умножьте одно из чисел на 1.0:

SELECT something*1.0/total FROM somewhere

Это даст вам деление с плавающей запятой вместо целочисленного деления.

95
ответ дан NullUserException 21 August 2018 в 01:16
поделиться
  • 1
    также работает для преобразования строки в число – Jared Forsyth 20 April 2013 в 05:06
  • 2
    Это не работает для меня с SQLite 3.15 .. Решение @AdamGarner делает. – Ev. Kounis 8 May 2018 в 08:28
  • 3
    Вы действительно не должны использовать этот трюк, так как разработчикам (включая самих себя) легко вернуться и удалить то, что выглядит как избыточный код. Лучшей практикой было бы бросить плавать, как я предложил ниже. – Adam Garner 14 May 2018 в 09:50

В Sqlite деление целого на другое целое число будет всегда округлять до ближайшего целого.

Поэтому, если вы перечислите свой счетчик в float:

SELECT CAST(field1 AS FLOAT) / field2
35
ответ дан Adam Garner 21 August 2018 в 01:16
поделиться
  • 1
    – Felix Edelmann 9 May 2016 в 20:50
  • 2
    Да, по одной простой причине. Вы четко заявляете о том, что вы намереваетесь совершить. И не вкладывая в то, что полагается на других разработчиков, зная, почему вы умножили на 1. – Adam Garner 15 May 2016 в 16:18
  • 3
    @FelixEdelmann Кроме того, если вы явно не используете float, вы сами можете даже забыть, почему у вас это 1.0, и удалить его в какой-то момент. Это относится не только к другим разработчикам. – danuker 18 August 2017 в 11:07
1
ответ дан Greg 21 August 2018 в 01:16
поделиться
select cast ( ( select 1 ) as real );

https://www.sqlite.org/lang_expr.html#castexpr

7
ответ дан mpb 21 August 2018 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: