将float转换为nvarchar,保留十进制变量部分

时间:2016-07-28 17:02:35

标签: sql-server format

我在将float转换为字符串时遇到问题,但t-sql以科学格式返回它。

示例:

.Value = IIf(Interior.ColorIndex = 15, "C", "P")

返回“5.22342e + 009”

嗯我尝试了功能STR但有一点:我不知道浮点数有多少小数,我不想绕它。

有一种方法可以将float返回为nchar,其精度与声明的float相同吗?

非常感谢。

3 个答案:

答案 0 :(得分:1)

小数位数有问题。下面的代码显示十进制值失真,我无法找到解决方法。如果有办法确定浮点数的精度,那么结果可以舍入到正确的值。

由于精度未知,我还没有找到解决方案。

Declare @Amount float
Set @Amount=5223421341.23

Select LTrim(RTrim(Str(@Amount, 1000, 1000)))

制作:5223421341.2299995000000000

根据我所读的内容浮点数只是定义的近似值,所以这可能是你能得到的最好的。

https://msdn.microsoft.com/en-us/library/ms173773.aspx

http://www.webopedia.com/TERM/F/floating_point_number.html

  

请注意,计算机可以表示的大多数浮点数都是   只是近似值。编程的挑战之一   浮点值确保近似值导致   合理的结果。如果程序员不小心,小   近似值的差异可以滚雪球到那里   最后的结果变得毫无意义。

答案 1 :(得分:0)

根据Microsoft SQL Server文档,(https://msdn.microsoft.com/en-us/library/ms173773.aspxSub ExampleForAngel() Dim names As Worksheet Set names = Worksheets("Sheet1") Dim eval As Worksheet Set eval = Worksheets("Sheet2") Dim index As Long index = 0 Dim name As String While (names.Range("A1").Offset(index, 0).Value <> "") name = names.Range("A1").Offset(index, 0) eval.Copy after:=Worksheets(Worksheets.Count) ActiveSheet.name = name ActiveSheet.Range("A2").Value = name index = index + 1 Wend End Sub float的同义词,float(53)的精度为15位。

但精确的15位数字对指数没什么好说的。指数大约为300.这意味着浮点数能够表示其中包含大约300个零的数字。这就是科学记谱法不可或缺的原因。

如果科学记数法对您来说不是问题,那么21个字符就足以容纳15个数字,其中包含句点,加上尾随float(53)

但是由于科学记数法对你来说是一个问题,那么你必须有一个足够大的文本字段来容纳表格的数字 0.0000000000000000000000000000000 ... 00000000000000000000000000723237435435644 (这几乎是300个零,后跟15个数字) 和 377733453453453000000000000000000 ... 00000000000000000000000000000000000000.0 (这是15位数后跟近300个零。)

很明显,你需要一些非常庞大的文本字段来填写你想要做的事情。

所以,最重要的是,我建议修改你想要在这里完成的工作,而不是寻找解决问题的方法。

答案 2 :(得分:0)

根据Microsoft,SQL中最好的方法可能会使用STR函数。

declare @amount float
set @amount=5223421341.23
print str(@amount,20,6)
print convert(VARCHAR(50),rtrim(ltrim(str(@amount,20,6))))

这似乎涵盖了大多数情况,但您需要找出数据集中的最大值和最小值以及最大精度。