C# 在插入Mysql表时,如何将金额字段四舍五入到2位小数
如何在将值插入到C# 在插入Mysql表时,如何将金额字段四舍五入到2位小数,c#,asp.net,mysql,.net-2.0,C#,Asp.net,Mysql,.net 2.0,如何在将值插入到mysql数据库之前将其舍入到2位小数。假设在插入数据库时,如果我的金额字段为800,我想将其四舍五入为800.00,并且如果我输入234.56,我想按原样插入,如果345.5655意味着我想以345.56的形式插入字符串 Console.WriteLine("{0:0.##}", value); 假设将值存储在十进制列中 Decimal value = 345.5655M; Decimal roundedValue = Math.Round(value, 2); 然后将ro
mysql
数据库之前将其舍入到2位小数。假设在插入数据库时,如果我的金额字段为800
,我想将其四舍五入为800.00
,并且如果我输入234.56
,我想按原样插入,如果345.5655
意味着我想以345.56的形式插入字符串
Console.WriteLine("{0:0.##}", value);
假设将值存储在十进制列中
Decimal value = 345.5655M;
Decimal roundedValue = Math.Round(value, 2);
然后将roundedValue
插入数据库
如果要控制舍入,可以在指定值的地方使用重载
如果在将值插入数据库之前未对其进行舍入(假设数据库的精度为2),则可能会截断(而不是舍入)该值:
当为此类[十进制]列分配的值在小数点后的位数超过指定比例所允许的位数时,该值将转换为该比例。(精确行为是特定于操作系统的,但通常效果是截断到允许的位数。)
Decimal
存储创建时使用的精度,这意味着3.9M.ToString()
返回3.9
,而3.90M.ToString()
返回3.90
(即使数字相等)。但是,使用Math.Round
将截断任何尾随的零位小数。如果要将3.9M
四舍五入为3.90M
,则需要从字符串中解析数字:
var roundedValue = Decimal.Parse(
value.ToString("F2", CultureInfo.InvariantCulture),
CultureInfo.InvariantCulture
);
但是,我不知道MySQL是否会保留后面的零位小数。如果您使用的是参数化/准备好的语句和MySQL提供程序,您只需使用普通的舍入函数(Math.Round()
)并将其结果用作执行查询的参数值:
using(var command = connection.CreateCommand())
{
command.Text = "INSERT INTO MyTable (Col1, Col2) VALUES (@v1, @v2)";
var parameter1 = command.CreateParameter();
parameter1.Name = "@v1";
parameter1.Value = Math.Round(myValue, 2);
command.Parameters.Add(parameter1);
// ...
command.ExecuteNonQuery();
}
但是如果我的值为3.90
如果我使用你的代码,我得到的值为3.9
我该怎么办