C#强制结果为两位小数并不';行不通
我正在尝试创建一个简单的应用程序,它允许您输入您的工资,然后当按下按钮时,工资上的税款将被计算并显示。该应用程序可以工作,但我希望结果强制显示两位小数。我试过不同的代码,但都不行。数学四舍五入(x,2);这是最明显的,但不起作用。有人能告诉我我做错了什么吗 我的代码:C#强制结果为两位小数并不';行不通,c#,decimal,C#,Decimal,我正在尝试创建一个简单的应用程序,它允许您输入您的工资,然后当按下按钮时,工资上的税款将被计算并显示。该应用程序可以工作,但我希望结果强制显示两位小数。我试过不同的代码,但都不行。数学四舍五入(x,2);这是最明显的,但不起作用。有人能告诉我我做错了什么吗 我的代码: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button1_Click(object sender, RoutedEventArgs e)
{
String Text = Textbox.Text;
Double Salaris = Convert.ToDouble(Text);
Double Belasting;
Double Schijf1;
Double Schijf2;
Double Schijf3;
Double Schijf4;
if (Salaris <= 6800)
{
Belasting = Math.Round (((Salaris / 100) * 35.70) ,2);
Schijf1 = Math.Round (((Salaris / 100) * 35.70) ,2);
S1uitkomst.Content = Schijf1;
S2uitkomst.Content = 0000.00;
S3uitkomst.Content = 0000.00;
S4uitkomst.Content = 0000.00;
}
else if (Salaris > 6800 && Salaris < 21800)
{
Belasting = Math.Round (((6800 / 100) * 35.70) + (((Salaris - 6800) / 100) * 37.05) ,2);
Schijf1 = Math.Round (((6800 / 100) * 35.70) ,2);
Schijf2 = Math.Round ((((Salaris - 6800) / 100) * 37.05) ,2);
S1uitkomst.Content = Schijf1;
S2uitkomst.Content = Schijf2;
S3uitkomst.Content = 0000.00;
S4uitkomst.Content = 0000.00;
}
else if (Salaris > 21800 && Salaris < 48100)
{
Belasting = Math.Round (((6800 / 100) * 35.70) + ((15000 / 100) * 37.05) + (((Salaris - 21800) / 100) * 50.00) ,2);
Schijf1 = Math.Round (((6800 / 100) * 35.70), 3);
Schijf2 = Math.Round (((15000 / 100) * 37.05) ,3);
Schijf3 = Math.Round ((((Salaris - 21800) / 100) * 50.00) ,3);
S1uitkomst.Content = Schijf1;
S2uitkomst.Content = Schijf2;
S3uitkomst.Content = Schijf3;
S4uitkomst.Content = 0000.00;
}
else
{
Belasting = Math.Round (((6800 / 100) * 35.70) + ((15000 / 100) * 37.05) + ((26300 / 100) * 50.00) + (((Salaris - 48100) / 100) * 60.00) ,2);
Schijf1 = Math.Round (((6800 / 100) * 35.70), 2);
Schijf2 = Math.Round (((15000 / 100) * 37.05) ,2);
Schijf3 = Math.Round (((26300 / 100) * 50.00), 2);
Schijf4 = Math.Round ((((Salaris - 48100) / 100) * 60.00) ,2);
S1uitkomst.Content = Schijf1;
S2uitkomst.Content = Schijf2;
S3uitkomst.Content = Schijf3;
S4uitkomst.Content = Schijf4;
}
Totaal.Content = Belasting;
}
private void Textbox_TextChanged(object sender, TextChangedEventArgs e)
{
}
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效按钮1\u单击(对象发送者,路由目标)
{
String Text=Textbox.Text;
Double Salaris=Convert.ToDouble(文本);
双重迟到;
双Schijf1;
双Schijf2;
双Schijf3;
双Schijf4;
如果(萨拉里斯6800和萨拉里斯<21800)
{
Belasting=Math.Round((6800/100)*35.70)+(Salaris-6800/100)*37.05),2;
Schijf1=数学圆((6800/100)*35.70),2;
Schijf2=数学圆(((萨拉里斯-6800)/100)*37.05),2;
S1uitkomst.Content=Schijf1;
S2uitkomst.含量=Schijf2;
S3uitkomst.含量=0000.00;
S4uitkomst.含量=0000.00;
}
否则如果(萨拉里斯>21800和萨拉里斯<48100)
{
Belasting=Math.Round((6800/100)*35.70)+(15000/100)*37.05)+(Salaris-21800/100)*50.00),2);
Schijf1=数学圆((6800/100)*35.70),3;
Schijf2=数学圆((15000/100)*37.05),3);
Schijf3=数学圆(((萨拉里斯-21800)/100)*50.00),3;
S1uitkomst.Content=Schijf1;
S2uitkomst.含量=Schijf2;
S3uitkomst.Content=Schijf3;
S4uitkomst.含量=0000.00;
}
其他的
{
Belasting=Math.Round((6800/100)*35.70)+(15000/100)*37.05)+(26300/100)*50.00)+(萨拉里斯-48100)/100)*60.00),2);
Schijf1=数学圆((6800/100)*35.70),2;
Schijf2=数学圆((15000/100)*37.05),2);
Schijf3=数学圆((26300/100)*50.00),2;
Schijf4=数学圆(((萨拉里斯-48100)/100)*60.00),2;
S1uitkomst.Content=Schijf1;
S2uitkomst.含量=Schijf2;
S3uitkomst.Content=Schijf3;
S4uitkomst.Content=Schijf4;
}
总含量=延迟;
}
私有void Textbox\u TextChanged(对象发送者,textchangedventargs e)
{
}
}
}您需要将结果转换为字符串:
S2uitkomst.Content = String.Format("{0:0.00}", Schijf2 );
如果没有零,您将永远不会看到double显示2个或更多的零。这是没有意义的,因为double不存储数字,所以没有价值 但是,如果您的目标是用两个小数点显示用户的实际数字,只需将其转换为字符串:
var result = string.Format("{0:0.00}", doubleVariable);
我的猜测(因为你的问题不清楚确切的问题是什么)是,在输出的两位数之后,你没有得到小数点的截断。您需要格式化输出,而不是对基础值进行四舍五入。Round
函数只是告诉您的十进制值精度较低,而不是以不同方式显示。你所说的你想要的是你想要你的价值以某种感知来显示。这辆车有你需要的东西
您可以删除轮叫,然后执行以下操作
S1uitkomst.Content = Schijf1.toString("C");
这将把输出格式化为货币。如果您想以不同的方式控制格式,请查看
ToString
方法的文档。因为您处理的是货币,所以您可以使用包含美元符号的格式
请以SO答案为例。
解释
不起作用
。最有可能的情况是,您正在谈论舍入的方向。还有第三个参数可以传入,它是一个枚举。从零开始尝试AwayFromZero
进行正常的四舍五入。工资不应该是双倍的。在财务计算中处处使用十进制。要格式化输出,请使用。重复: