一:数据库处理
1:数据库有Convert(),一般大家用的比较多的是对时间的处理,其实他还可以对金钱类型(money)处理。
select convert(varchar(30),convert(money,要处理的数字),1)。
这种方法可以加上三位一撇,但是只能保留2位小数。
2:数据库自定义函数处理。
create FUNCTION [dbo].[FN_FormatNumber]
(
@Value VARCHAR(100)
)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @Temp varchar(100)
SET @Temp=''
--返回值
DECLARE @ReturnValue VARCHAR(100)
SET @ReturnValue = ''
DECLARE @i INT
SET @i=charindex('.',@Value)
IF @i>0
BEGIN
SET @Temp = RIGHT(@Value,LEN(@Value)-@i+1)
SET @ReturnValue = LEFT(@Value,@i-1)
END
ELSE
BEGIN
SET @ReturnValue = @Value
END
IF LEN(@ReturnValue)>3
BEGIN
WHILE LEN(@ReturnValue)>3
BEGIN
SET @Temp = ',' + RIGHT(@ReturnValue,3) + @Temp
SET @ReturnValue = LEFT(@ReturnValue,LEN(@ReturnValue)-3)
END
SET @ReturnValue = @ReturnValue + @Temp
END
ELSE
BEGIN
SET @ReturnValue = @Value;
END
return @ReturnValue
END
二:C#程序处理
1:string returnvalue= Convert.ToDouble("123456.678").ToString("N");
这种方式也是默认的保留两位小数。
后面的N可以修改成N1,N2,N3意思是代表保留1,2,3为小数,这种方式可以设置保留的小数位数,但是当设置为N3的时候,1.2会显示为1.200,位数不够的时候会在后面补0。
去除后面的0,可以使用Convert.ToDouble("123456.100")自动会去掉后面的0。
多说一点对于去除数字后面的0的方法js可以直接写上parseFloat(要去除0的字符串)。
2:自己写一个方法一样可以解决
public string ConvertNum(object obva, string dotnum)
{
string value = "0";
if (!DBNull.Value.Equals(obva))
{
value = obva.ToString();
}
string inter = "";
string strdotnum = "";
string opera = value.StartsWith("-") ? "-" : "";
dotnum = string.IsNullOrEmpty(dotnum) ? "2" : dotnum;
value = string.IsNullOrEmpty(value) ? "0" : value.TrimStart('-');
value = Convert.ToDouble(Convert.ToDouble(value).ToString("f" + dotnum)).ToString();
if (value.Contains('.'))
{
string[] values = value.Split('.');
value = values[0];//整数部分
strdotnum = values[1];//小数部分
}
//分割完成,处理整数部分加3位一瞥
while (value.Length > 3)
{
inter = "," + value.Substring(value.Length - 3) + inter;
value = value.Substring(0, value.Length - 3);
}
if (string.IsNullOrEmpty(strdotnum))
{
return opera + value + inter;
}
return opera + value + inter + "." + strdotnum;
}
写的有点乱,主要是为了防止数据库为空的时候,和是负值的时候
3:还可以使用一个更简单的方法解决就是.ToString()的另外一种写法
Convert.ToDouble("123456.678").ToString("#,#.######");
最后面也是保留几位小数。
这地方具体使用可以自己在处理一下例如
Convert.ToDouble("123456.678434341234").ToString("#,#." + new string('#', 4))
123456.678434341234是要处理的数据,后面的4是要保留的小数位数。
我自己感觉这是最好的一种方式。