我的表带有实列,我需要将所有行都用亿加倍,这给了我很好的结果(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
答案 0 :(得分:2)
我知道这是浮点问题,但我不明白为什么 它与最旧的表不同。
这是不同的,因为您认为旧表中的值为151.112,但事实并非如此。其中的值为151.112048,由于浮动数据点的不准确性,该值显示为151.112。
解决方法是在表中使用Decimal而不是Real。