我必须将两个十进制数相乘:6,0 * 5,50
,结果为:33,000
如何从结果中删除最后0
?我希望33,00
为结果。
要相乘,我使用查询:
var rr = (from s in baza.customer
where userID == s.userID
&& s.data.Month == dat
select s.hours * s.prise.Sum();
答案 0 :(得分:4)
你有一个字符集问题。您的代码在北美语言环境中运行,其中,
是千位分隔符(.
是小数点)。
答案 1 :(得分:4)
由于这里似乎存在一些混淆,我会向另外两个人发布类似的答案,但是会有一个简短而完整的程序来说明为什么这是必要的。
首先,值得澄清的是(如评论中所示)这是将两个小于10的数字相乘 - 作为C#文字,它们分别为6.0米和5.50米。它们是decimal
值的事实也具有高度相关性 - 因为decimal
维持尾随零,而double
则不会。所以:
// Note: my system is in en-gb
using System;
class Test
{
static void Main()
{
decimal x = 6.0m;
decimal y = 5.50m;
decimal z = x * y;
Console.WriteLine(z); // Prints 33.000
Console.WriteLine(z.ToString("0.00")); // Prints 33.00
// Same with composite formatting
Console.WriteLine("{0:0.00}", z); // Still prints 33.00
// If you want fewer than 2 decimal digits when they're
// not necessary
Console.WriteLine(z.ToString("0.##")); // Prints 33
}
}
如果当前线程的文化使用','
而不是'.'
作为小数点分隔符,那么显然您将获得“33,00”。
如果您想将实际值舍入到2位小数,可以使用decimal.Round
执行此操作:
decimal rounded = decimal.Round(z, 2);
但当然这可能会丢失重要信息。
请注意,当您要向用户提供信息时,通常仅应用字符串格式。
答案 2 :(得分:2)
尝试使用字符串格式:string.Format("{0:0.##}", number)
。
答案 3 :(得分:1)
为什么不在输出时格式化值而不是尝试在计算时删除小数?
使用
String.Format("{0:0.##}", number)
或
String.Format("{0:0.00}", number)
只在输出中包含小数。
答案 4 :(得分:0)
NumberFormat nf4 = new DecimalFormat("0000");
var rr=+nf6.format(new Integer(rr));
答案 5 :(得分:0)
假设您希望以字符串形式表示,则需要使用Standard Numeric Format Strings格式化结果。例如,在对您发布的值(33.000)进行快速测试后,代码(33.000).ToString("f")
的结果为33.00。
注意:“f”可能不是您需要的实际格式说明符 - 最好通读我首先链接的文章。