Я должен использовать десятичное число, плавание или дважды для этого простого математического результата?

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>
[117 ]

Чтобы исправить это, у вас есть два варианта:

  • Установите параметры градиента правильно с самого начала:

[112 ]
<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>

5
задан mskfisher 9 May 2012 в 17:13
поделиться

5 ответов

То, в чем Вы нуждаетесь, является Типом данных 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 приведет к арифметическому переполнению.

2
ответ дан 15 December 2019 в 01:13
поделиться

Я выбрал бы Float over Double и вероятно Плавание по Decimal:. Идентификатор идет для Floatalthough, который все должны дать тому же результату.

Взгляните на эти две страницы для Плаваний и Десятичных чисел

1
ответ дан 15 December 2019 в 01:13
поделиться

Десятичное число является главным образом использованием за валюту. В то время как это работало бы, люди могли бы найти это сбивающим с толку. В этом случае я думаю, что плавание было бы лучшим выбором.

1
ответ дан 15 December 2019 в 01:13
поделиться

Десятичное число - это является самым простым, однако любой из mentined сделает задание

0
ответ дан 15 December 2019 в 01:13
поделиться

Если Вы хотите, хранят результаты с помощью как можно меньше пространства, Вы могли бы, вероятно, сделать что-то вроде этого (псевдокод):

integer = ( sum(all_values) / all_values.count().float ) * 100;

Это даст Вам значение 352 в среднем для 3.52, таким образом, можно будет сохранить его как целое число (байт был бы достаточно большим, я предполагаю), и просто разделите его на 100, когда Вы хотите отобразить его.

С другой стороны, если Вы не заботитесь об устройстве хранения данных среднего значения, использование значений плавающих, возможно, быстрее. (Протестируйте обоих для наблюдения то, что является на самом деле самым быстрым в системе.)

0
ответ дан 15 December 2019 в 01:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: