我的数据库中有一个包含货币字段的表。我已经为该货币字段创建了实体并创建了 decimal 属性。当该字段的值显示在我的 MVC3 View 上时,它在小数点后有四个零 0000,如下所示:5489.0000。我只想显示两个 00 或小数位。我该如何解决它。为什么即使我将属性声明为小数,它仍显示四位小数。
请提出建议。
最佳答案
SQL Server money
数据类型在内部是一个 64 位整数,隐含小数点后 4 位。引用联机丛书的话,它精确到“万分之一的货币单位”。它大致相当于 decimal(19,4)
。
小数位数为 4 而不是 2 的原因是为了保持算术结果的精度。您的普通货币值(value)的标度为 2(例如 $3.27) 两个标度为小数点后 2 位的数字相乘或相除得到的结果精确到小数点后 4 位:9.23 除以 3.27 得到 2.82262996941896(大约)的结果。您可以将结果带到您想要的任何精度(小数位数)。但是,结果仅精确到小数点后 4 位 (2.8226),因为原始值仅精确到小数点后 2 位。该测量值精确到指定最小单位的 1/2 以内 (+/- 0.005)。
但我离题了。
由于 SQL Server money
值的隐含比例为 4,ADO.Net 将该值转换为比例为 4 的 System.Decimal。并且由于 System.Decimal 跟踪比例,当你将它转换为字符串时,你得到 4 位小数。
为了获得更少,你可以
- 在转换之前对其进行舍入,使用适当的
Decimal.Round()
重载,或者 - 根据需要格式化(例如
(3.27M).ToString("0.00") ;
。
希望这对您有所帮助。
这个程序:
namespace Sandbox
{
using System ;
class Program
{
static void Main( string[] args )
{
decimal pi = (decimal) Math.PI ;
string piText = pi.ToString("0.00");
Console.WriteLine("PI to 2 decimal places is {0} one way, and {1:0.00} another" , piText , pi ) ;
return;
}
}
}
产生你所期望的:
PI to 2 decimal places is 3.14 one way, and 3.14 another
干杯,
N.
关于c# - 小数点/货币字段的两位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075067/