我有一个问题,将货币价值划分为" 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;最终结果的方法。但我不知道,因为我想一步到位(循环)。 我该怎么办?
感谢
答案 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;
}