2013-07-16 48 views
0

我的应用程序需要将数字四舍五入到小数点后两位。我有一个文档有4个字段:x,y,zAmount,例如。和:不正确的结果与总和为2的小数整数

Amount = x*y/z; 

这里是我的问题:

TotalAmount: x(100)*y(41.30)/z(1000) = 4.13. 

SubAmount1: x(70)*y(41.30)/z(1000) = 2.89 [2.891 before rounding] 

SubAmount2: x(10)*y(41.30)/z(1000) = 0.41 [0.413 before rounding] 

SubAmount3: x(10)*y(41.30)/z(1000) = 0.41 [0.413 before rounding] 

SubAmount4: x(10)*y(41.30)/z(1000) = 0.41 [0.413 before rounding] 

现在所有'SubAmounts'的总和不等于'TotalAmount'。由于四舍五入取得0.01的区别。

我该如何解决这个问题?请分享你的建议。

注意:保存完整小数位'2.891'对我无效,因为我们有现有数据,其他一些计算取决于“金额”的四舍五入值。

+1

你想改变什么 - 总数或其中一个数额? – Mark

+0

你想实现什么?制作一个处理小计四舍五入的求和函数? – Pieter

+2

*保存完整的小数位'2.891'不适用于我* - >那么您如何期待它能给出真正的结果?浮点运算也有一些舍入错误,所以获得实际结果的可能性很小。 –

回答

0

您可以在变量中存储您的完整(不是四舍五入的)SubAmounts(例如,S1将包含2.891,S2将为0.413,S3将为0.413,S4将为0.413)。 要填写您的文档,只需将SubAmount1作为S1的四舍五入值,作为SubAmount2作为S2的四舍五入值,作为SubAmount3作为S3的舍入值并作为SubAmount4作为S4的舍入值。 TotalAmount的值是通过舍入总和(S1 + S2 + S3 + S4)获得的。 希望它可以帮助你。

相关问题