应用百分比/税后的十进制价格

时间:2017-12-28 13:21:56

标签: c#

直升机,

我正在申请管理C#中的预算,但我在舍入值方面遇到了很多问题。我得到的规格是用户可以输入含税和不含税的产品价值(在两个文本框中)。

因此,我正在制定一项功能,将价格从税价转换为不含税的价格和不含税的价格,以及含税的价格。

所以我将它附加到两个文本框的componentDidMount() { this.loadData(this.props.match.params.userId); //using redux and axios to get data } 事件

TextChanged

private void txtPrecioTotal_TextChanged(object sender, EventArgs e) { if (!ignoreTextChanged) { decimal precio; if (decimal.TryParse(txtPrecioTotal.Text, out precio)) { precio = precio / (1 + IVATxt.Value / 100); ignoreTextChanged = true; txtPrecioBase.Text = precio.ToString("##.##"); ignoreTextChanged = false; } } } private void txtPrecioBase_TextChanged(object sender, EventArgs e) { if (!ignoreTextChanged) { decimal precio; if (decimal.TryParse(txtPrecioBase.Text, out precio)) { precio = precio * (1 + IVATxt.Value / 100); ignoreTextChanged = true; txtPrecioTotal.Text = precio.ToString("##.##"); ignoreTextChanged = false; } } } 是阻止递归计算的ignoreTextChanged

问题在于计算不是那么精确,只有两位数。

假设boolIVATxt.Value,例如我们在21输入100(含税价格),则会计算txtPrecioTotal的价格(价格)没有税),但是如果我们在82,64中输入该值,我们会得到txtPrecioBase(含税价格),应该是99,99

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

计算:

82,64 * 1,21是99,9944(该轮次为99,99)

82,65 * 1,21是100,0065(向下舍入到100,01)

因此,没有办法用两位小数代表价格,当应用21%税时,这将导致100。如何解决这个问题在很大程度上取决于应用场景(也可能是法律要求)。以后用户或应用程序将使用该值做什么?

处理此问题的一些可能方法。请注意,这在很大程度上取决于应用场景,还考虑了如何对客户所在地区的某些税收进行计算的法律要求。

  1. 对于计算值,允许它们具有两个以上的小数位

  2. 当计算值仅用于提供信息而非进一步计算时,可以容忍使用不精确的值。

  3. 在我参与的一个项目中,我们允许凭证有一个标记,无论计算是基于净值还是总值。当凭证被标记为基于网络时,则用户输入净值。当凭证被标记为基于总额时,则用户输入总值。然后,税收计算仅应用于凭证的总和(相应地,具有相同税级的项目的总和)。

  4. ...

答案 1 :(得分:0)

最后以这种方式解决了问题:

  1. 在BD
  2. 中将小数精度从2位更改为5位
  3. 设置为包含产品的实体,在两个文本框之一中计算的价格。此价格的精确度将高达5。继续我发布的示例,100的价格与我之前提到的税额82.64不含税,现在它将是82.64463 。如果我将该值应用于21%的税,我现在获得值100,0000023

  4. 然后应用格式F2C2我得到两位数的价格。继续该示例,先前步骤的结果将是100,00,这是用户输入的价格。

  5. 感谢您的所有答案。