我怎么能在数字相乘时只返回两个小数

本文关键字:小数 两个 返回 怎么能 数字 | 更新日期: 2023-09-27 18:19:47

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

我怎么能在数字相乘时只返回两个小数

您有一个字符集问题。您的代码在北美地区运行,其中,是千位分隔符(.是十进制标记)。

由于这里似乎有一些混淆,我将发布与另外两个类似的答案,但用一个简短但完整的程序来说明为什么有必要这样做。

首先,值得澄清的是(如评论中所示),这是将两个小于10的数字相乘在一起-作为C#文字,它们将是6.0m和5.50m。它们是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);

但这当然会丢失重要信息。

请注意,在向用户显示信息时,通常只应应用字符串格式。

尝试使用字符串格式:string.Format("{0:0.##}", number)

为什么不在输出时格式化值,而不是在计算时剪切小数?

使用

String.Format("{0:0.##}", number) 

String.Format("{0:0.00}", number)

输出中只有小数。

NumberFormat nf4 = new DecimalFormat("0000");
var rr=+nf6.format(new Integer(rr));

假设您想要字符串形式的表示,则需要使用标准数字格式字符串来格式化结果。例如,在对您发布的值(33.000)进行快速测试后,代码(33.000).ToString("f")给出了33.00的结果。

注意:"f"可能不是你需要的实际格式说明符——最好先通读我链接的文章。