fillStyles, такие как градиенты и шаблоны, рисуются относительно матрицы контекста, поэтому ваш градиент фактически рисуется над прямоугольником:
var c = canvas.getContext('2d'); // context object
var grad = c.createLinearGradient(0, 0, 0, 100);
grad.addColorStop(0, "red"); //
grad.addColorStop(1, "blue"); //
c.fillStyle = grad;
// show the whole gradient
c.fillRect(0, 0, canvas.width, canvas.height);
// OP's square
c.strokeRect(100, 100, 100, 100);
<canvas id="canvas" height="300"></canvas>
Чтобы исправить это, у вас есть два варианта:
<canvas id="canvas" height="300"></canvas>
fill()
. Действительно, рисование пути и заполнение могут быть выполнены на отдельной матрице.
var c = canvas.getContext('2d');
var grad = c.createLinearGradient(0, 0, 0, 100);
grad.addColorStop(0, "red"); //
grad.addColorStop(1, "blue"); //
c.fillStyle = grad;
// draw the path
c.rect(100, 100, 100, 100);
// change the filling matrix
c.translate(100, 100);
c.fill();
// reset the matrix
c.setTransform(1,0,0,1,0,0);
<canvas id="canvas" height="300"></canvas>
То, в чем Вы нуждаетесь, является Типом данных decimal:
declare @val decimal(10,2)
select @val = 10.155
select @val
Когда Вы входные значения, можно или полагаться на созданный в округлении или явно решить, какое округление Вы хотите:
select val = round(10.155, 2, 0) -- rounded
select val = round(10.155, 2, 1) -- truncated
Десятичное число (10,2) средства, что могут использоваться десять цифр, и что два из них должны быть взяты как являющийся после десятичной точкой. т.е. самое большое количество, которое может содержать десятичное число (4,2), 99.99. Попытка установить его на 100 приведет к арифметическому переполнению.
Я выбрал бы Float over Double и вероятно Плавание по Decimal:. Идентификатор идет для Floatalthough, который все должны дать тому же результату.
Взгляните на эти две страницы для Плаваний и Десятичных чисел
Десятичное число является главным образом использованием за валюту. В то время как это работало бы, люди могли бы найти это сбивающим с толку. В этом случае я думаю, что плавание было бы лучшим выбором.
Десятичное число - это является самым простым, однако любой из mentined сделает задание
Если Вы хотите, хранят результаты с помощью как можно меньше пространства, Вы могли бы, вероятно, сделать что-то вроде этого (псевдокод):
integer = ( sum(all_values) / all_values.count().float ) * 100;
Это даст Вам значение 352 в среднем для 3.52, таким образом, можно будет сохранить его как целое число (байт был бы достаточно большим, я предполагаю), и просто разделите его на 100, когда Вы хотите отобразить его.
С другой стороны, если Вы не заботитесь об устройстве хранения данных среднего значения, использование значений плавающих, возможно, быстрее. (Протестируйте обоих для наблюдения то, что является на самом деле самым быстрым в системе.)