将货币价值划分为零?

时间:2014-10-26 03:16:47

标签: c# sql-server accounting

我有一个问题,将货币价值划分为" 0"。 我建立会计软件,资产缩减。

例如,我的值为1000000。 我会把它分成3个。

1000000/3 = 333333,33333333333333333333333

问题是,我会这样做:

  

步骤1:1000000 - 333333,33333333333333333333333 =   666666,66666666666666666666667

     

第2步:666666,66666666666666666666667 -   333333,33333333333333333333333 = 333333,33333333333333333333334

     

第3步:333333,33333333333333333333334 -   333333,33333333333333333333333 =   的 0,00000000000000000000001

示例代码

decimal value = 100;
int divider = 3;
decimal x = value / divider;

for (int i = 0; i < divider; i++)
{
    value = value - x;
}

结果,值= 0,000000000000000000000000001。

是的,这是一个问题。 一个货币价值,我将分为零。

我尝试使用数学方法,例如&#34; math.floor&#34;在每一步(循环)。 结果值为-2。 我知道我可以使用&#34; math.floor&#34;最终结果的方法。但我不知道,因为我想一步到位(循环)。 我该怎么办?

感谢

1 个答案:

答案 0 :(得分:1)

您应该考虑将1/3乘以1,2或3,而不是减去之前的数字。这样的事情应该有效:

var originalAmount = 1000000d;
var thirdOfOriginal = originalAmount / 3;

Console.WriteLine("Original number ... {0}", originalAmount);
Console.WriteLine("Original - 1/3 .... {0}", (originalAmount - (thirdOfOriginal * 1)));
Console.WriteLine("Original - 2/3 .... {0}", (originalAmount - (thirdOfOriginal * 2)));
Console.WriteLine("Original - 3/3 .... {0}", (originalAmount - (thirdOfOriginal * 3)));

// Output
// Original number ... 1000000
// Original - 1/3 .... 666666.666666667
// Original - 2/3 .... 333333.333333333
// Original - 3/3 .... 0

这可以更一般地写成:

private static List<decimal> GetAmounts(decimal originalNumber, int numberOfDivisions)
{
    var amounts = new List<decimal>();

    if (numberOfDivisions > 0)
    {
        var fraction = originalNumber / numberOfDivisions;

        for (int i = 1; i <= numberOfDivisions; i++)
        {
            amounts.Add(originalNumber - (fraction * i));
        }
    }

    return amounts;
}