大家好!
这里是浮点四舍五入的问题,当我想要插入数据到表使用它的视图。数据需要以varchar的形式存储在Table中。
表:
CREATE TABLE [dbo].[TestTableFloat_E]
(
[id] [int] IDENTITY(1,1) NOT NULL,
[FloatField] [varchar](100) NOT NULL
)
视图:
ALTER VIEW [dbo].[TestTableFloat]
AS
SELECT id
,Convert(float, FloatField) as FloatField
FROM dbo.TestTableFloat_E
数据,我从表中选择使用它的视图-必须有float类型(字段FloatField)。我不能插入数据到表中,如果我需要,我需要用它的视图。因此,我不能(这是任务规则)将数据直接插入到Table中,只能使用View。我创建了插入数据的触发器:
CREATE TRIGGER [dbo].[tr_TestTableFloatInsert]
ON [dbo].[TestTableFloat]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
insert into TestTableFloat_E (FloatField)
select FloatField
FROM INSERTED
动作:我尝试插入数据到TestTableFloat_E(表)与它的视图(TestTableFloat)的帮助下,上升触发器和插入数据到表。问题:当我插入浮点数,我有四舍五入,我不需要:
insert TestTableFloat (FloatField)
select 123.123456
我有123,123在表TesttableFloat。我需要它不四舍五入,我必须是123.123456会是什么呢?
你可以让它存储更多的数字,但它会切换到科学记数法:
CREATE TRIGGER [dbo].[tr_TestTableFloatInsert]
ON [dbo].[TestTableFloat]
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
insert into TestTableFloat_E (FloatField)
select CONVERT(varchar(100),FloatField,2)
FROM INSERTED
END
最终将1.231234560000000e+002
存储到表中。
From CAST and CONVERT:
当表达式为float或real时,style可以是下表所示的值之一。其他值按0处理。
0(默认)最多6位数字。适当时用科学记数法。
1总是8位数。始终使用科学记数法。
2
总是16位。始终使用科学记数法。
插入通常的警告:期望浮点数和十进制表示总是完全可转换是徒劳的,以及使用不适当的数据类型来存储特定类型的数据
对于这个数据来说,最好的数据类型应该是具有适当规模和精度的decimal
,而这两种类型都不是您正在使用的。但你声称这些是"必需的"类型。例如,如果视图使用小数而不是浮点数,则存储的varchar(100)
值完全符合预期。