[英]How can I format currency with no decimals but only when the decimal is zero?
[英]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.