如何将实数转换为浮点数而不添加额外的数字

时间:2019-02-13 14:29:59

标签: sql-server

我的表带有实列,我需要将所有行都用亿加倍,这给了我很好的结果(151112000):

declare @tbl table (n real)
insert into @tbl values(151.112)
select cast (n * 1000000 as float) AS [Quantity1]
from @tbl

但是当我从旧的现有表中选择时,151.112变成了151112048

怎么可能?

我的旧ddl表:

CREATE TABLE [dbo].[ProvidentSegmentPortfolioMonthlyHistory](
    [Fund_id] [int] NOT NULL,
    [Report_Date] [datetime] NOT NULL,
    [Segment_id] [int] NOT NULL,
    [Quantity] [real] NULL,
    [QuantityPercent] [real] NULL,
    [Date_Update] [datetime] NULL,
    [operator] [varchar](50) NULL,
 CONSTRAINT [PK_ProvidentSegmentPortfolioMonthlyHistory ] PRIMARY KEY CLUSTERED 
(
    [Fund_id] ASC,
    [Report_Date] ASC,
    [Segment_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

1 个答案:

答案 0 :(得分:2)

  

我知道这是浮点问题,但我不明白为什么   它与最旧的表不同。

这是不同的,因为您认为旧表中的值为151.112,但事实并非如此。其中的值为151.112048,由于浮动数据点的不准确性,该值显示为151.112。

解决方法是在表中使用Decimal而不是Real。