![](/img/trans.png)
[英]How can I turn “.” decimal points to “,” comma when entering a decimal value in a textbox?
[英]Decimal value gets rounded when entering DB
我正在嘗試將一個十進制值上傳到數據庫中。
在上載之前(調試C#時)為十進制,但是在插入數據庫時將十進制四舍五入,因此在小數點后沒有數字,而是零。 為什么?
變量聲明:
decimal screen_size = 0;
cmd.Parameters.Add(new SqlParameter("@devicename", SqlDbType.NVarChar));
cmd.Parameters.Add(new SqlParameter("@batterylife", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@price", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@BasemarkX", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@ImageURL", SqlDbType.VarChar, int.MaxValue));
cmd.Parameters.Add(new SqlParameter("@year", SqlDbType.Int));
cmd.Parameters.Add(new SqlParameter("@screensize", SqlDbType.Int));
分配:
screen_size = decimal.Parse(Regex.Match(screenSize, @"\d+(\.\d+)?").Value);
上傳:
cmd.CommandText =
"UPDATE Phones " +
"SET price = @price, BasemarkX = @BasemarkX, year = @year, batterylife = @batterylife, screensize = @screensize " +
"WHERE devicename = @devicename";
//set parameters values
cmd.Parameters["@devicename"].Value = model;
cmd.Parameters["@batterylife"].Value = batterylife;
cmd.Parameters["@price"].Value = price;
cmd.Parameters["@BasemarkX"].Value = bench;
cmd.Parameters["@year"].Value = year;
cmd.Parameters["@ImageURL"].Value = imgURL;
cmd.Parameters["@screensize"].Value = screen_size;
cmd.ExecuteNonQuery();
D B:
CREATE TABLE [dbo].[Phones] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[devicename] NVARCHAR (50) NULL,
[batterylife] INT DEFAULT ((0)) NULL,
[price] INT DEFAULT ((0)) NULL,
[BasemarkX] INT DEFAULT ((0)) NULL,
[year] INT DEFAULT ((0)) NULL,
[ImageURL] NVARCHAR (MAX) NULL,
[screensize] DECIMAL (18, 4) DEFAULT ((0)) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
澄清:我正在嘗試上傳一個十進制數字,通常在點的兩端各加一位數字,每側最多兩個(測試無效的測試是在每一端只有一位數字)
您的screensize
變量為DECIMAL (18, 4)
screensize
DECIMAL (18, 4)
。 因此,它最多可以容納18位數字,並且允許您在浮點數后有4位數字,並且如果您有更多的浮點數,則將四舍五入。
必須了解SQL中的十進制類型背后的工作。 以DECIMAL(size,d)作為大小,確定值的總長度,包括浮點后的數字。例如,如果您的值是'500000.00',而十進制(8,2)表示您只能有一個總共8位數字,小數點后僅允許2位數字。
在您的情況下,參數大小為DECIMAL(18,4),這意味着如果一個數字的位數比sql server將截斷的位數多,則只允許使用4個浮點數。
問題是由您定義參數@screensize
您已將其聲明為SqlDbType.Int類型,即使您可以將參數的Value屬性設置為其他類型的值(如十進制),當您將該參數發送給數據庫引擎時,它也會四舍五入到最接近的整數,您會在數據庫表中看到該值。
使用參數時,最重要的是為它們提供數據庫表中期望的數據類型。
將該參數聲明為
cmd.Parameters.Add(new SqlParameter("@screensize", SqlDbType.Decimal));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.