C++ 获取C+中的十进制数(10,2)+;给我看看?

C++ 获取C+中的十进制数(10,2)+;给我看看?,c++,mysql,floating-point,decimal,C++,Mysql,Floating Point,Decimal,十进制数据格式有点问题。因此,代码如下所示: #define SHOW_MONEY "Money = %.2f!" QueryResult result = MyDatabase.PQuery("SELECT money FROM users WHERE user_id = '%u'", GetUserId()); char str[64]; Field *fields = result-&

十进制数据格式有点问题。因此,代码如下所示:

        #define SHOW_MONEY                    "Money = %.2f!"
        QueryResult result = MyDatabase.PQuery("SELECT money FROM users WHERE user_id = '%u'", GetUserId());

        char str[64];

        Field *fields = result->Fetch();
        float money = fields[0].GetFloat();

        sprintf(str, SHOW_MONEY, money);
        user->ShowInformation(str, GetUserId(), true);

当字段包含像12313.95这样的错误时,它会显示12314.00(值是四舍五入的),而不是正确的值。mysql中是否有处理十进制数据的内置方法?我需要得到准确的值,并显示给用户。有什么建议吗?

float
格式太小了。使用
double
,或者如果您的编译器支持它,则使用
longduble
,以获得更高的精度

但是,这些浮点类型不能存储像12313.95这样的精确值
decimal
是一种精确格式:它可以以指定的精度存储您输入的精确值。转换为长双精度总是会失去一些精度。

现在使用
printf(“%.2f”)
的方式可以很好地使用它们(它将以正确的方式进行舍入),但是如果要对它们执行广泛的计算,可能最好先将它们转换为
long int
(乘以100并舍入)当再次将它们存储在数据库中时,只能切换回长双精度。

float
是一种有限的数据格式,在您的情况下只能保存这么多的信息位(或
std::numeric\u limits::digits10
小数位),仅足以存储12314,但不能保存更多信息

作为一种快速解决方法,您可以尝试使用
双精度
甚至
长双精度
,但是您应该考虑您希望数字具有哪些属性。二进制浮点数甚至不能精确地表示像
0.1
这样的数字(可以找到关于这方面的大量信息)

由于您正在处理货币amonuts,因此使用十进制浮点库或定点库可能是更好的选择