Сохранить строку как массив с плавающей точкой C ++

Являются ли методы .net SqlDataReader культуральными инвариантами

SqlDataReader не используют никаких CultureInfo или что-то эквивалентное. Он не знает культур.

Когда ваши значения хранятся в db как десятичные, SqlDataReader получает это десятичное значение. Как они (string-), представленные в вашем приложении, зависят от того, как вы это делаете: просто с помощью dataReader["myColumn"].ToString() будет использоваться ваш текущий CultureInfo. Если вы хотите другую культуру, вы должны явно указать это.

Что произойдет, если они сохранены в varchar и попытаются использовать .GetDecimal ()?

Когда они хранятся как строки, у вас есть проблема (по крайней мере, если вы не знаете культуру, с которой были созданы эти строки). Вы должны использовать правильные CultureInfo для первого parse эти строки, чтобы получить правильные значения. Но почему бы вам хранить номера как строки в вашем db?

-1
задан Hector Esteban Cabezos 19 January 2019 в 15:18
поделиться

1 ответ

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

std::vector<float> arr(trans_matrix.size(), 0);

это создает вектор того же размера, что и строка. Но размер строки - это количество символов, которое не совпадает с числом чисел в строке. Также

arr[j] = std::stof(trans_matrix[i]);

trans_matrix[i] - это символ, это не строка, поэтому вы не можете использовать функцию, которая преобразует строку в число с плавающей точкой.

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

Как бы вы это сделали, если бы читали из std::cout? Ну, это точно так же, если вы читаете из строки, за исключением того, что вы используете std::istringstream вместо std::cout. Вот один простой способ.

#include <sstream>

std::vector<float> arr;
std::istringstream input(trans_matrix);
float f;
while (input >> f)
    arr.pusk_back(f);

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

0
ответ дан john 19 January 2019 в 15:18
поделиться
Другие вопросы по тегам:

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