Perl: рекомендуемый метод для графического изображения (x, y) пикселей к монохромному битовому массиву

Этот ответ соответствует следующим критериям:

  • Не зависит от внешней зависимости.
  • Поддерживает ли локализацию.
  • Имеет тесты / доказательства.
  • Использует простые и лучшие практики кодирования (без сложных регулярных выражений, использует стандартные шаблоны кодирования).

Этот код основан на понятиях из других ответов. Это скорость выполнения должна быть среди лучших опубликованных здесь, если это вызывает беспокойство.

var decimalCharacter = Number("1.1").toLocaleString().substr(1,1);
var defaultCurrencyMarker = "$";
function formatCurrency(number, currencyMarker) {
    if (typeof number != "number")
        number = parseFloat(number, 10);

    // if NaN is passed in or comes from the parseFloat, set it to 0.
    if (isNaN(number))
        number = 0;

    var sign = number < 0 ? "-" : "";
    number = Math.abs(number);  // so our signage goes before the $ symbol.

    var integral = Math.floor(number);
    var formattedIntegral = integral.toLocaleString();

    // IE returns "##.00" while others return "##"
    formattedIntegral = formattedIntegral.split(decimalCharacter)[0];

    var decimal = Math.round((number - integral) * 100);
    return sign + (currencyMarker || defaultCurrencyMarker) +
        formattedIntegral  +
        decimalCharacter +
        decimal.toString() + (decimal < 10 ? "0" : "");
}

Эти тесты работают только на машине локали США. Это решение было принято для простоты и потому, что это могло привести к дрянному вводу (плохая автоматическая локализация), допускающему дрянные проблемы с выводом.

var tests = [
    // [ input, expected result ]
    [123123, "$123,123.00"],    // no decimal
    [123123.123, "$123,123.12"],    // decimal rounded down
    [123123.126, "$123,123.13"],    // decimal rounded up
    [123123.4, "$123,123.40"],  // single decimal
    ["123123", "$123,123.00"],  // repeat subset of the above using string input.
    ["123123.123", "$123,123.12"],
    ["123123.126", "$123,123.13"],
    [-123, "-$123.00"]  // negatives
];

for (var testIndex=0; testIndex < tests.length; testIndex++) {
    var test = tests[testIndex];
    var formatted = formatCurrency(test[0]);
    if (formatted == test[1]) {
        console.log("Test passed, \"" + test[0] + "\" resulted in \"" + formatted + "\"");
    } else {
        console.error("Test failed. Expected \"" + test[1] + "\", got \"" + formatted + "\"");
    }
}
8
задан vlad_tepesch 23 October 2014 в 10:48
поделиться

1 ответ

Взгляните на модуль GD (который взаимодействует с библиотекой GD ). Это делает создание графики довольно тривиальным и имеет широкий спектр выходных форматов, включая PNG и GIF.

9
ответ дан 5 December 2019 в 19:02
поделиться
Другие вопросы по тегам:

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