[英]Rounding in sql server
当我在SQL Server中执行此查询时:
SELECT
Vt.Id, Vt.Description,
abs(Vt.Rate)as VRate,
Sum(((itemprice * Qty) * (abs(Vt.Rate) / 100))) as VatAmount,
Sum(itemprice * Qty) as NetAmount
FROM
BillItem1 as B1
LEFT JOIN
bill b ON b.orderid = b1.orderid
LEFT JOIN
ItemDescription ItD ON ItD.Id = B1.itemId
LEFT JOIN
VatType Vt on Vt.Id = ItD.TaxId
WHERE
B1.IsActive = 1
AND B1.IsDelete = 0
AND b.date BETWEEN '11/09/2013 10:43:31 AM' AND '11/09/2013 10:43:31 AM'
GROUP BY
Vt.Id, Vt.Rate, Vt.Description
ORDER BY
SUM((b1.ItemPrice*Qty) - b1.NetAmount)DESC
输出是
当我与数据网格绑定时,它的显示在输出之后
在vatAmount
列中,在小数点后显示大量零,所以我想从网格视图中减少零。
您可以转换为带小数点后2位的十进制类型。
Select Vt.Id, Vt.Description, convert(decimal(20,2),abs(Vt.Rate)) as VRate,convert(decimal(20,2),Sum(((itemprice*Qty)*(abs(Vt.Rate)/100)))) as VatAmount ,convert(decimal(20,2),Sum(itemprice*Qty),)as NetAmount from BillItem1 as B1 left join bill b on b.orderid=b1.orderid
Left JOIN ItemDescription ItD ON ItD.Id=B1.itemId Left Join VatType Vt on Vt.Id = ItD.TaxId where B1.IsActive=1 and B1.IsDelete = 0 and b.date between '11/09/2013 10:43:31 AM' and '11/09/2013 10:43:31 AM' Group By Vt.Id,Vt.Rate,Vt.Description Order By SUM((b1.ItemPrice*Qty) - b1.NetAmount)DESC
无论如何,潜在价值是相同的。 如何显示它是格式化的问题 。 通常不需要在SQL中进行格式化。 格式化应在从数据库系统接收数据的客户端上完成。
不要在SQL中更改任何内容。 只需格式化网格即可显示所需的位数。
您可以使用以下代码格式化显示的数据。 此代码导致截断而不是舍入。
dataGridView1.DataSource=sometable; //bind to datasource
DataGridViewCellStyle style = new DataGridViewCellStyle();
style.Format = "N2";
this.dataGridView1.Columns["Price"].DefaultCellStyle = style;
在代码端转换数字。
恩。 :
string.Format("{0:0.##}", 256.583); // "256.58"
string.Format("{0:0.##}", 256.586); // "256.59"
string.Format("{0:0.##}", 256.58); // "256.58"
string.Format("{0:0.##}", 256.5); // "256.5"
string.Format("{0:0.##}", 256.0); // "256"
//===============================
string.Format("{0:0.00}", 256.583); // "256.58"
string.Format("{0:0.00}", 256.586); // "256.59"
string.Format("{0:0.00}", 256.58); // "256.58"
string.Format("{0:0.00}", 256.5); // "256.50"
string.Format("{0:0.00}", 256.0); // "256.00"
//===============================
string.Format("{0:00.000}", 1.2345); // "01.235"
string.Format("{0:000.000}", 12.345); // "012.345"
string.Format("{0:0000.000}", 123.456); // "0123.456"
在你的情况下:
<asp:TemplateField HeaderText="VatAmount">
<ItemTemplate>
<%# string.Format("{0:0.00}", Eval("VatAmount").ToString()); %>
</ItemTemplate>
</asp:TemplateField>
用round(,2)
括起你的VatAmount: round(Sum(((itemprice*Qty)*(abs(Vt.Rate)/100))),2)
您可以使用Round函数仅获得小数点后所需的位数。
double myValue = 23.8000000000000;
double newValue=Math.Round(myValue, 2);
结果:newValue = 23.8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.