如何在乘以数字时只返回两位小数?

时间:2012-01-09 19:36:19

标签: c# linq-to-sql decimal

我必须将两个十进制数相乘: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();

6 个答案:

答案 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”可能不是您需要的实际格式说明符 - 最好通读我首先链接的文章。