繁体   English   中英

乘数时如何只返回两个小数?

[英]How can I return only two decimals when multiplying numbers?

我必须将两个小数相乘: 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”。

如果要将实际值四舍五入到小数点后两位,则可以使用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”可能不是您所需的实际格式说明符-最好通读我首先链接的文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM