我的数据库中有一个带有money字段的表。我创建了实体并为该货币字段创建了小数属性。当该字段的值显示在我的MVC3视图上时,它在小数点后有四个零0000,如下所示:5489.0000。我想只显示两个00或小数位。我该如何解决呢?为什么它显示四位小数,即使我将属性声明为十进制。
请建议。
答案 0 :(得分:18)
SQL Server money
数据类型内部是一个64位整数,隐含的比例为4位小数。引用联机丛书,它是准确的“至万亿货币单位”。它是decimal(19,4)
的粗略等价物。
4而不是2的比例的原因是为了保持算术结果的精确性。您的普通货币值的等级为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将该值转换为System.Decimal,其比例为4.并且由于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
干杯,
<磷>氮答案 1 :(得分:6)
你必须格式化字符串。
如果你想要显示的钱,你可以做的一件事是:
static void Main ()
{
decimal x = 0.999m;
decimal y = 9999999999999999999999999999m;
Console.WriteLine("My amount = {0:C}", x);
Console.WriteLine("Your amount = {0:C}", y);
}
}
输出: 输出
我的金额= $ 1.00
您的金额= $ 9,999,999,999,999,999,999,999,999,999.00
{0:C}是货币格式
希望这有帮助!
答案 2 :(得分:3)
以下是有关格式化字符串的所有信息。
答案 3 :(得分:1)
我用过它并且有效:
YourDecField.ToString("N")