2013-08-24 37 views
28

我一直在试图使这个打印出来的答案是两位小数。所有涉及的数学都必须保持在小数点后两位的格式。我已经尝试了一些东西,我不确定要做什么改变来完成这项工作。格式化一个双精度到两位小数

double pdt1 = 239.99; 
double pdt1Total; 
double pdt2 = 129.75; 
double pdt2Total; 
double pdt3 = 99.95; 
double pdt3Total; 
double pdt4 = 350.89; 
double pdt4Total; 
double wage = 200; 
double percentage = 9; 
double total; 
double answer; 
double i = 100; 
double a; 
double b; 
double c; 
double d; 


Console.Write("Enter number sold of product #1: "); 
a = Convert.ToInt32(Console.ReadLine()); 

Console.Write("Enter number sold of product #2: "); 
b = Convert.ToInt32(Console.ReadLine()); 

Console.Write("Enter number sold of product #3: "); 
c = Convert.ToInt32(Console.ReadLine()); 

Console.Write("Enter number sold of product #4: "); 
d = Convert.ToInt32(Console.ReadLine()); 



pdt1Total = a * pdt1; 
pdt2Total = b * pdt2; 
pdt3Total = c * pdt3; 
pdt4Total = d * pdt4; 

total = (pdt1Total + pdt2Total + pdt3Total + pdt4Total); 



string.Format("{0:0.00}", total); 
string.Format("{0:0.00}", answer = (total * percentage/i) + wage); 


Console.WriteLine("Earnings this week: "+answer+""); 
+2

什么是不工作? – Stobor

+2

您可能不想使用浮点货币 - 舍入错误最终会咬你。似乎没有内置任何东西,但请参阅http://www.codeproject.com/Articles/28244/A-Money-type-for-the-CLR的链接以获取灵感。说了这么多,当你开始做百分比计算等事情时,你真的不能避免再增加几个小数位...... – canton7

+0

我需要双打始终保留两位小数,但答案不会反映这一点。所以格式为:209.00(如果您为产品3选择1个产品,其他所有产品为0,则应该是答案。) –

回答

50

string.Format不会更改原始值,但它会返回格式化的字符串。例如:

Console.WriteLine("Earnings this week: {0:0.00}", answer); 

注意:Console.WriteLine允许内联字符串格式。以上是等价于:

Console.WriteLine("Earnings this week: " + string.Format("{0:0.00}", answer)); 
8

你能让一个double到小数点后两位是这样的:

double c; 
c = Math.Round(c, 2); 

但要注意四舍五入最终会咬你,所以请谨慎使用。

改为使用decimal数据类型。

+2

我确实尝试了Math.Round,结果太快,结果变得不真实。 –

+0

为什么四舍五入和小数之间的区别是什么? – batmaci

45

那么,根据您的需求,您可以选择以下任何一项。走出看跌期权对每种方法

书面你可以选择你需要

这将圆

decimal d = 2.5789m; 
Console.WriteLine(d.ToString("#.##")); // 2.58 

这将确保2位小数写了一个。

d = 2.5m; 
Console.WriteLine(d.ToString("F")); //2.50 

如果你想写逗号,你可以使用这个

d=23545789.5432m; 
Console.WriteLine(d.ToString("n2")); //23,545,789.54 

,如果你想返回十进制值的圆角,你可以做到这一点

d = 2.578m; 
d = decimal.Round(d, 2, MidpointRounding.AwayFromZero); //2.58 
2

既然你是在工作货币为什么不简单地这样做:

Console.Writeline("Earnings this week: {0:c}", answer); 

这将格式化的回答为货币,所以我的机器(UK)上会出来为:本周

收益:£209.00

3

我会电子书籍定点(“F”)格式说明(如Ehsan所述)。请参阅Standard Numeric Format Strings

使用这个选项,你甚至可以有小数位的配置数量:

public string ValueAsString(double value, int decimalPlaces) 
{ 
    return value.ToString($"F{decimalPlaces}"); 
} 
相关问题