C# 中点舍入

C# 中点舍入,c#,C#,我试图对以下值进行四舍五入,但我不知道出了什么问题 NewValue -=(System.Math.Round(Global.WorkData.ValueOld - System.Math.Round (Global.WorkData.ValueOld * 20, 0) / 20, 2 )); 这就是我所做的: NewValue -=(System.Math.Round(Global.WorkData.ValueOld, 2, MidpointRounding.AwayFromZero - S

我试图对以下值进行四舍五入,但我不知道出了什么问题

NewValue -=(System.Math.Round(Global.WorkData.ValueOld - System.Math.Round (Global.WorkData.ValueOld * 20, 0) / 20, 2 ));
这就是我所做的:

NewValue -=(System.Math.Round(Global.WorkData.ValueOld, 2, MidpointRounding.AwayFromZero - System.Math.Round(Global.WorkData.ValueOld * 20, 2,MidpointRounding.AwayFromZero) / 20, 2 ));
你能告诉我我的密码出了什么问题吗?为什么我不能编译它?
谢谢

您遗漏了一个括号:

NewValue -=(System.Math.Round(Global.WorkData.ValueOld, 2, MidpointRounding.AwayFromZero - System.Math.Round(Global.WorkData.ValueOld * 20, 2,MidpointRounding.AwayFromZero) / 20, 2 ));


NewValue -=(System.Math.Round(Global.WorkData.ValueOld, 2, MidpointRounding.AwayFromZero**)** - System.Math.Round(Global.WorkData.ValueOld * 20, 2,MidpointRounding.AwayFromZero) / 20, 2 );
希望这对你有所帮助

我认为你的目标如下:(但我不是100%)


您至少有一个括号错误,因此它试图从
中点舍入中减去一个十进制值

然而,我还是不明白你到底想做什么

我强烈建议您将此语句拆分—拆分对
Round
的调用,然后使用值进行一次调用。例如:

decimal oldValue = Global.WorkData.ValueOld; // For convenience
decimal roundTo2 = Math.Round(oldValue, 2, MidpointRounding.AwayFromZero);
decimal roundTo20 = Math.Round(oldValue * 20, 2, MidpointRounding.AwayFromZero);
newValue -= roundTo2 - (roundTo20/20);
我仍然不知道你到底想对结果做什么——声明末尾的2是为了什么?你问题中的第一句话是什么意思?也许你想要:

decimal oldValue = Global.WorkData.ValueOld; // For convenience
decimal roundedBy20ths = Math.Round(oldValue * 20, 2,
                                    MidpointRounding.AwayFromZero) / 20;
decimal remainder = Math.Round(oldValue - roundedBy20ths, 2,
                               MidpointRounding.AwayFromZero);
newValue -= remainder;
??也许是这样,但我真的不知道


简短的语句使代码更清晰,让您更容易发现此类错误。

谢谢Jon,我将尝试这个建议。我认为应该在编写代码时练习简短的语句,以便更清晰。这是某人的密码,我们正试图更新他的密码。这很乏味:-(嗨,劳埃德,谢谢你的代码,但这些似乎不起作用:-(
decimal oldValue = Global.WorkData.ValueOld; // For convenience
decimal roundedBy20ths = Math.Round(oldValue * 20, 2,
                                    MidpointRounding.AwayFromZero) / 20;
decimal remainder = Math.Round(oldValue - roundedBy20ths, 2,
                               MidpointRounding.AwayFromZero);
newValue -= remainder;