我在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 double
与doubles
相同。
除了已经提出的固定逗号小数之外,只需使用普通整数!
而不是存储 18.001秒,你会存储 18001毫秒,你不会存储欧元、英镑、美元,而是存储十分之一美分或便士,......
输入 C++ 也是一个整数,大到足以容纳您需要的最大数字,例如uint32_t
,int64_t
, ...