用于浮点值的最佳变量类型



我在SQL Server数据库中有一个FLOAT列,在SQL Server Management Studio中如下所示。

18:001

当我将该值读入float变量并使用sprintf()("%f"(对其进行格式化时,它显示为:

18.000999

当我将该值读入double变量并使用sprintf()格式化时,它显示为:

18.001000

我可以得到一些建议吗?存储的值通常小于 100,最多有 3 位小数。什么是最好的 SQL Server 类型?什么是最好的C++类型?我应该使用一些舍入技术来获得我想要的格式吗?

注意:我实际上并没有使用sprintf(),我使用的是CString.Format(),但预期的行为是相同的。

存储的值通常小于 100,最多有 3 位小数。

SQL 数据库支持定点值的numeric/decimal(两者是同义词(类型。 对于您的特定类型,您可以使用decimal(6, 3). 这是六个有效数字,其中三个在小数点的右侧。 这两个值分别称为小数位数精度

如果值可能与此值略有不同,则可能需要更大的范围。

有了decimal/numeric,所见即所得。 我建议将它们作为定点数存储在数据库中。

回答关于其面值的问题,假设应该使用浮点并且不适用不适用。

除非你真的内存紧张,否则真的没有理由在C++中使用任何东西来计算浮点数,但double.浮子会失去精度,而不会给您带来太多回报。您也可以尝试long double,但根据我的经验,这是矫枉过正的。另外,如果您的编译器是MSVC,我听说它long doubledoubles相同。

除了已经提出的固定逗号小数之外,只需使用普通整数!

而不是存储 18.001,你会存储 18001毫秒,你不会存储欧元、英镑、美元,而是存储十分之一美分或便士,......

输入 C++ 也是一个整数,大到足以容纳您需要的最大数字,例如uint32_tint64_t, ...

最新更新