Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#强制结果为两位小数并不';行不通_C#_Decimal - Fatal编程技术网

C#强制结果为两位小数并不';行不通

C#强制结果为两位小数并不';行不通,c#,decimal,C#,Decimal,我正在尝试创建一个简单的应用程序,它允许您输入您的工资,然后当按下按钮时,工资上的税款将被计算并显示。该应用程序可以工作,但我希望结果强制显示两位小数。我试过不同的代码,但都不行。数学四舍五入(x,2);这是最明显的,但不起作用。有人能告诉我我做错了什么吗 我的代码: public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); }

我正在尝试创建一个简单的应用程序,它允许您输入您的工资,然后当按下按钮时,工资上的税款将被计算并显示。该应用程序可以工作,但我希望结果强制显示两位小数。我试过不同的代码,但都不行。数学四舍五入(x,2);这是最明显的,但不起作用。有人能告诉我我做错了什么吗

我的代码:

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
进行正常的四舍五入。工资不应该是双倍的。在财务计算中处处使用十进制。要格式化输出,请使用。重复: