Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我要为float增加小数点?_C#_Sql Server - Fatal编程技术网

C# 为什么我要为float增加小数点?

C# 为什么我要为float增加小数点?,c#,sql-server,C#,Sql Server,我创建如下表: CREATE TABLE [dbo].[tblBar1M]( [utcDT] [datetime2](7) NOT NULL, [Ticker] [text] NOT NULL, [FwdAdjMultiplier] [float] NULL, [FwdAdjOpen] [float] NULL, [FwdAdjHigh] [float] NULL, [FwdAdjLow] [float] NULL, [FwdAdjClos

我创建如下表:

CREATE TABLE [dbo].[tblBar1M](
    [utcDT] [datetime2](7) NOT NULL,
    [Ticker] [text] NOT NULL,
    [FwdAdjMultiplier] [float] NULL,
    [FwdAdjOpen] [float] NULL,
    [FwdAdjHigh] [float] NULL,
    [FwdAdjLow] [float] NULL,
    [FwdAdjClose] [float] NULL,
    [ActualClose] [float] NULL,
    [ActualLastBid] [float] NULL,
    [ActualLastAsk] [float] NULL,
    [Volume] [float] NULL,
    [Seq] [float] NOT NULL,
 CONSTRAINT [PK_tblBar1M] PRIMARY KEY CLUSTERED 
(
    [Seq] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
我创建插入命令,如下所示:

    commandText = "INSERT INTO BT..tblBar1M VALUES(@utcDT,@Ticker,@FwdAdjMultiplier,@FwdAdjOpen,@FwdAdjHigh,@FwdAdjLow,@FwdAdjClose,@ActualClose,@ActualLastBid,@ActualLastAsk,@Volume,@Seq)";

    cmdInsertBar1M = new SqlCommand(commandText, conn);
    cmdInsertBar1M.Parameters.Add("@utcDT", SqlDbType.DateTime2);
    cmdInsertBar1M.Parameters.Add("@Ticker", SqlDbType.NVarChar);
    cmdInsertBar1M.Parameters.Add("@Seq", SqlDbType.Float);
    cmdInsertBar1M.Parameters.Add("@FwdAdjMultiplier", SqlDbType.Float);
    cmdInsertBar1M.Parameters.Add("@FwdAdjOpen", SqlDbType.Float);
    cmdInsertBar1M.Parameters.Add("@FwdAdjHigh", SqlDbType.Float);
    cmdInsertBar1M.Parameters.Add("@FwdAdjLow", SqlDbType.Float);
    cmdInsertBar1M.Parameters.Add("@FwdAdjClose", SqlDbType.Float);
    cmdInsertBar1M.Parameters.Add("@ActualClose", SqlDbType.Float);
    cmdInsertBar1M.Parameters.Add("@ActualLastBid", SqlDbType.Float);
    cmdInsertBar1M.Parameters.Add("@ActualLastAsk", SqlDbType.Float);
    cmdInsertBar1M.Parameters.Add("@Volume", SqlDbType.Float);
然后我填充参数:

 double FwdAdjMultiplier = 1.25;
double baropenMid = 0.727735

cmdInsertBar1M.Parameters["@FwdAdjOpen"].Value = (float)Math.Round( baropenMid * FwdAdjMultiplier,6);

float f = (float)Math.Round(baropenMid * FwdAdjMultiplier, 6);
//f = 909.668762
正如您在关于VS检查的评论中所看到的,f有6个DP。但在SSMS的表中插入之后,FwdAdjOpen(被***包围)有更多的DP

为什么?


浮点具有固有的精度误差,无法表示具体的值(除非它与浮点可表示的值完全匹配),因此,即使对浮点进行四舍五入,它的非精确值也会有所不同,因为数据库中的最终值有更多的小数


这可以为您提供有关浮点精度误差的更多详细信息:

浮点具有固有的精度误差,您无法表示具体的值(除非它完全符合浮点可表示的值),因此,即使对浮点进行四舍五入,它的非精确值也会有所不同,因此,数据库中的最终值有更多的小数


这可以为您提供有关浮点精度错误的更多详细信息:

T-SQL
FLOAT
是双精度。浮点数是单精度的。在T-SQL中,C#调用的
float
REAL
。您得到的是有效的
(双精度)909.668762f


如果需要更高的精度,可以在C#中使用
double
,如果不需要,可以在SQL Server中使用
REAL
。看

T-SQL
FLOAT
是双精度的。浮点数是单精度的。在T-SQL中,C#调用的
float
REAL
。您得到的是有效的
(双精度)909.668762f


如果需要更高的精度,可以在C#中使用
double
,如果不需要,可以在SQL Server中使用
REAL
。看

您在哪里看到错误的数据?在SQL Server Management Studio中?是。我对问题进行了调整以反映这一点问题已经得到了回答,但仅供参考,
baropenMid
fwdajmultiplier
的值不会与您给出的值相乘
f
在您的代码中给出了
0.909669
您在哪里看到错误数据?在SQL Server Management Studio中?是。我对问题进行了调整以反映这一点问题已经得到了回答,但仅供参考,
baropenMid
fwdajmultiplier
的值不会与您给出的值相乘<代码中的code>f给出了
0.909669
Console.WriteLine((双)909.668762f)
确实打印了OP问题中给出的值,
909.668762207031
。出于好奇,为什么要投否决票?它似乎是正确的,并且回答了问题。
Console.WriteLine((double)909.668762f)
确实打印了OP问题中给出的值,
909.668762207031
。出于好奇,为什么要投否决票?它似乎是正确的,回答了这个问题。
utcDT   Ticker  FwdAdjMultiplier    FwdAdjOpen  FwdAdjHigh  FwdAdjLow   FwdAdjClose ActualClose ActualLastBid   ActualLastAsk   Volume  Seq
2016-04-28 14:23:00.5885822 GL  1.25    ***909.668762207031***  909.825012207031    904.681274414063    906.150024414063    724.919982910156    724.640014648438    725.200012207031    509600  6