我有一个维数n的整数数组,比如现在n = 9。
我想将其初始化为
[0.11,0.11,0.11,0.11,0.11,0.11,0.11,0.11,0.12]
每个条目都是1 / n,最多需要两位小数, 最后一个条目是1的剩余数字。
我应该如何轻松地做到这一点?这就是我现在所做的事情
double sumOfn=0;
for (int i = 0; i < array.Length;i++ )
{
double n;
if (i < array.Length-1)
{
array[i] = Math.Floor((1/(double) array.Length)*100/100);
sumOfn += n;
}else
{
array[i] = 1 - sumOfn;
}
}
答案 0 :(得分:2)
计算值时,不能将double约束到特定的精度。
我建议的是对每个n进行100的整数除法,然后将该值除以100.
可以通过将除法的其余部分添加到最后一个元素然后再除以100来轻松计算最后一个值。
当我们第一次学习浮点时,这基本上就像我们在学校所做的那样是欧几里德师:)
答案 1 :(得分:1)
不确定这是否算作创意......:)
double[] array = new double[9];
if (array.Length < 1 || array.Length > 100) throw new InvalidTimeZoneException("lol");
array = Enumerable.Concat(
Enumerable.Repeat(100 / array.Length, array.Length - 1),
new[] { 100 - ((array.Length - 1) * (100 / array.Length)) }
).Select(i => i / 100.0).ToArray();