C++ 以C+表示的精度+;

C++ 以C+表示的精度+;,c++,sql,decimal,concatenation,C++,Sql,Decimal,Concatenation,但是如果我检查查询的值,就会得到如下结果 UPDATE currency SET value = 0.000455451 所以小数丢失了 想知道为什么吗?在向流输出双精度值之前,您可以尝试调用流中的(10)(或您实际需要的任何值) 您可以这样做: #include <iomanip> query << "UPDATE currency SET value= " << std::setprecision(10) << currencyValue;

但是如果我检查查询的值,就会得到如下结果

UPDATE currency SET value = 0.000455451
所以小数丢失了


想知道为什么吗?

在向流输出双精度值之前,您可以尝试调用流中的(10)(或您实际需要的任何值)

您可以这样做:

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

查询在向流输出双精度值之前,您可以尝试调用流上的(10)(或您实际需要的任何值)

您可以这样做:

#include <iomanip>
query << "UPDATE currency SET value= " << std::setprecision(10) << currencyValue;
#包括
查询currencyValue为双精度,“UPDATE currency SET value=”为字符串。从双精度到字符串的转换会丢失精度。
您可以使用类似“std::setprecision(20)”的功能或使用不同的函数将double转换为字符串。

currencyValue为double,“UPDATE currency SET value=”为字符串。从双精度到字符串的转换会丢失精度。
您可以使用类似“std::setprecision(20)”的内容,或者使用不同的函数将double转换为字符串。

什么是查询类型?std::stringstream?这看起来是一种获取SQL查询字符串的强大方法(可能不是当
currencyValue
是数字类型时,但是如果您有这个,那么您可能还有其他以这种方式创建SQL查询字符串的实例)。查询的类型是:为什么不使用货币作为表示美分数的整数?它与大小无关,这是原则问题。让我解释一下(我将使用
float
,因为它更明显,但同样适用于
double
)。浮点数只能保存二次幂的分数值之和,而不能保存任意值。例如,可以存储0.5或0.25或(0.5+0.25)或(0.25+0.001953125)。不可能存储0.251、0.26或0.261,只能近似存储。此外,一个浮点数有9个有效小数(double有17个),不多。这意味着1.25=1+0.25,但是100000000.25=10000000,这是金钱的坏业力。查询是什么类型的?std::stringstream?这看起来是一种获取SQL查询字符串的强大方法(可能不是当
currencyValue
是数字类型时,但是如果您有这个,那么您可能还有其他以这种方式创建SQL查询字符串的实例)。查询的类型是:为什么不使用货币作为表示美分数的整数?它与大小无关,这是原则问题。让我解释一下(我将使用
float
,因为它更明显,但同样适用于
double
)。浮点数只能保存二次幂的分数值之和,而不能保存任意值。例如,可以存储0.5或0.25或(0.5+0.25)或(0.25+0.001953125)。不可能存储0.251、0.26或0.261,只能近似存储。此外,一个浮点数有9个有效小数(double有17个),不多。这意味着1.25=1+0.25,但是100000000.25=10000000,这是金钱的坏业力。对不起,我该怎么做?我是C++@Dave的新手。你工作起来了,但是因为你是C++新手,所以这里有一个好的页面来寻找线索。@ JeimMs和@ Als -谢谢编辑和评论——你们都改进了我的答案。对不起,我该怎么做?我是C++@Dave的新手。你工作起来了,但是因为你是C++新手,所以这里有一个好的页面来寻找线索。@ JeimMs和@ Als -谢谢编辑和评论——你们都改进了我的答案。