SQLite (.NET), 8-байтовый double преобразуется в 'бесконечность', а не в double. MaxDouble как вставлено?

Я использую библиотеку SQLite .NET для сохранения двойников

Это мой псевдокод

// create table t1 (value REAL)
// ... connect to db
var sql = $"insert into t1(value) VALUES ({double.MaxValue:G64})"; // insert into t1(value) VALUES (1.7976931348623157E+308)
using (var command = new SQLiteCommand(sql, con))
{
  command.ExecuteNonQuery();
}

Затем я делаю выбор:

// SELECT * FROM t1
// .. connect + query
var d = reader.GetDouble(0);

Но значение d - это double.PositiveInfinity, а не double.MaxValue, в чем может быть причина разницы?

А если вы используете параметр вместо преобразования значения в строку во вставке?

Evk 01.05.2018 14:24

В любом случае лучше использовать параметры, так как текущий код сломается в любой системе, не использующей символ точки в качестве десятичного разделителя.

ckuri 01.05.2018 14:44

@Evk, у меня System.OverflowException, я думаю, проблема в том, что double.MaxValue в C# не то же самое, что std::numeric_limits<double>::max() в C++

Simon Goodman 01.05.2018 18:53

@ckuri, да, конечно, но double.MaxValue не использует точку / запятую, проблема больше в том, что данные не были правильно сохранены ни в одной системе.

Simon Goodman 01.05.2018 18:54

@SimonGoodman Верно. Если я запустил ваш код на своей немецкой машине, я получу «1,7976931348623157E + 308» - обратите внимание на запятую вместо точки.

ckuri 01.05.2018 18:57

@ckuri, я понимаю, что вы говорите (я смотрел на это как на целое число, а не на научную нотацию), но в любом случае это не совсем проблема, поскольку это не работает как целое / научное число или нет.

Simon Goodman 01.05.2018 19:27

Возможно ошибки округления.

CL. 01.05.2018 20:09

@CL., Нет, данные сохраняются как -Inf или Inf, я думаю, это связано с C++ max double vs C# max double. Они немного разные.

Simon Goodman 01.05.2018 21:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
97
0

Другие вопросы по теме