我怎么能在数字相乘时只返回两个小数
本文关键字:小数 两个 返回 怎么能 数字 | 更新日期: 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"可能不是你需要的实际格式说明符——最好先通读我链接的文章。