如何在将值插入mysql
数据库之前将值舍入为2位小数。假设我在插入数据库时将我的金额字段设为800
我想将其四舍五入到800.00
,如果我输入234.56
我想插入它,如果它是,如果345.5655
表示我想插入345.56
。
答案 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.9
而3.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();
}