我在将float转换为字符串时遇到问题,但t-sql以科学格式返回它。
示例:
.Value = IIf(Interior.ColorIndex = 15, "C", "P")
返回“5.22342e + 009”
嗯我尝试了功能STR但有一点:我不知道浮点数有多少小数,我不想绕它。
有一种方法可以将float返回为nchar,其精度与声明的float相同吗?
非常感谢。
答案 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.aspx)Sub 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)