SELECT ltrim (STR (1234.34968311,44,16));
结果: 1234.3496831099999000
SELECT ltrim (STR (123.34968311,44,16));
结果: 123.3496831100000000
有人可以帮我理解为什么第一个查询返回与输入不完全相同的varchar值。
答案 0 :(得分:0)
因为STR在FLOAT数据类型上运行,所以在转换为请求大小的VARCHAR之前,您的十进制数常量将转换为FLOAT。众所周知,FLOAT值是您认为可以获得的数字的近似值:-)所以您最终得到小数点后的不同值。
例如,尝试STR(1234.1,44,16),您将获得1234.0999999999999000。
如果您在http://msdn.microsoft.com/en-us/library/ms189527.aspx阅读了手册,则说float_expression - Is an expression of approximate numeric (float) data type with a decimal point
。是的,接近。