浮点数精度问题。

zhaozhao110 2011-04-06 02:05:28
比如说1/3.0,默认情况下是小数点后面保留6位,假如我想保留9位怎么办。。
numberic()和DECIMAL(10,2)类型都不行,都是后面补0,想要精确的。。难道只能1/3.0000000吗?变量怎么办?
...全文
111 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
AcHerat 元老 2011-04-06
  • 打赏
  • 举报
回复
declare @i decimal(18,9)
set @I = 1
select @i/3
zhaozhao110 2011-04-06
  • 打赏
  • 举报
回复
好的,谢了。结贴
--小F-- 2011-04-06
  • 打赏
  • 举报
回复
是的。
zhaozhao110 2011-04-06
  • 打赏
  • 举报
回复
declare @t decimal(38,9)
declare @s decimal(38,7)
set @s=3.0
set @t=1/@s
select @t

这样应该就可行了吧。

--小F-- 2011-04-06
  • 打赏
  • 举报
回复
只有在定义的时候直接采用DEC或者NUMBERIC
zhaozhao110 2011-04-06
  • 打赏
  • 举报
回复
那么定义变量的时候就不能用float了是吧,只能用decimal(38,7)了,然后这样的话出来的就会是我需要的精度了。。。
--小F-- 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhaozhao110 的回复:]
有没有什么办法呢?
[/Quote]
3楼已经说了 无解
zhaozhao110 2011-04-06
  • 打赏
  • 举报
回复
有没有什么办法呢?
zhaozhao110 2011-04-06
  • 打赏
  • 举报
回复
谢谢,可是你看一下结果
declare @t decimal(38,9)
set @t=1/3.0
select @t


是0.333333000

我想要0.333333333
--小F-- 2011-04-06
  • 打赏
  • 举报
回复
因为浮点数本身就是不精确的 要精确只能自己加0
--小F-- 2011-04-06
  • 打赏
  • 举报
回复
select cast(1.0/3 as decimal(38,9))

/*
---------------------------------------
0.333333000

(1 行受影响)*/
AcHerat 元老 2011-04-06
  • 打赏
  • 举报
回复
decimal(38,9)

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧