2011-07-18 6 views
0

У меня есть этот запрос в мой код C++:Точность в C++

query << "UPDATE currency SET value= " << currencyValue 

currencyValue определяется как «const double& currencyValue», и когда я смотрю значение является

0.00045545105422339915 

Но если я проверить значение запрос, то я получаю что-то вроде этого

UPDATE currency SET value = 0.000455451 

так десятичные получить не хватает ...

Любые идеи, почему?

+4

Какой тип запроса? Строка std :: stringstream? – carlpett

+0

Это выглядит как грозный способ получить уязвимость [SQL-инъекции] (http://en.wikipedia.org/wiki/SQL_injection) (вероятно, не тогда, когда 'currencyValue' является числовым типом, но если у вас есть это, то вы вероятно, также имеют другие экземпляры создания строк SQL-запросов таким образом). –

+0

Тип запроса wostringstream –

ответ

5

Вы можете попробовать позвонить setprecision (10) (или любое значение, которое вы действительно хотите) в своем потоке, прежде чем выводить на него двойное значение.

Вы можете сделать это следующим образом:

#include <iomanip> 
query << "UPDATE currency SET value= " << std::setprecision(10) << currencyValue; 
+0

Извините, как мне это сделать? Я новичок в C++ –

+0

Это сработало !!! Спасибо! –

+0

@Dave. Вы получили его на работу, но поскольку вы новичок в C++, вот хорошая страница для поиска ключей [link] (http://www.cplusplus.com/reference/iostream/manipulators/setprecision/). – jetimms

0

currencyValue двойной, "значение UPDATE валюты SET =" строка. Точность теряется при преобразовании из double в строку. Вы можете использовать что-то вроде «std :: setprecision (20)» или использовать другую функцию для преобразования double в строку.

Смежные вопросы