如何在插入Mysql表时将金额字段舍入为2位小数

时间:2011-08-30 08:44:58

标签: c# asp.net mysql .net-2.0

如何在将值插入mysql数据库之前将值舍入为2位小数。假设我在插入数据库时​​将我的金额字段设为800我想将其四舍五入到800.00,如果我输入234.56我想插入它,如果它是,如果345.5655表示我想插入345.56

3 个答案:

答案 0 :(得分:1)

尝试格式化这样的字符串

Console.WriteLine("{0:0.##}", value);

答案 1 :(得分:1)

假设您将值存储在DECIMAL列中。

Decimal value = 345.5655M;
Decimal roundedValue = Math.Round(value, 2);

然后将roundedValue插入数据库。

如果要控制舍入,可以使用指定MidpointRounding值的重载。

如果在将值插入数据库之前没有对值进行舍入(假设数据库的精度为2),则存在截断(而不是舍入)值的风险:

  

当为这样的[DECIMAL]列分配一个小数点后面的位数超过指定比例允许的值时,该值将转换为该比例。 (精确的行为是特定于操作系统的,但通常效果是截断到允许的位数。)

Decimal存储创建时使用的精度,意味着3.9M.ToString()返回3.93.90M.ToString()返回3.90(即使数字为{1}}等于)。但是,使用Math.Round将截断任何尾随的零小数。如果要将3.9M舍入为3.90M,则需要从字符串中解析数字:

var roundedValue = Decimal.Parse(
   value.ToString("F2", CultureInfo.InvariantCulture),
   CultureInfo.InvariantCulture
);

但是,我不知道MySQL是否会保留尾随的零小数。

答案 2 :(得分:1)

如果您正在使用参数化/预准备语句和MySQL Connector/NET提供程序,您只需使用常规舍入函数(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();
}