Входные данные в немецком формате данных в сочетании с ChartsJs

Я относительный новичок в Charts.js, но он мне нужен для создания некоторых красивых графиков для моей веб-страницы. В фоновом режиме у меня запущен проект Django, который вычисляет определенное количество чисел. Поскольку я установил код языка в Django на "de-at" (требование, поскольку есть некоторые входные переменные, которые должны заполнить австрийские пользователи), форматы чисел выглядят следующим образом: "1.000.000,54€", а не как в США - "1,000,000.54€".

Если я теперь хочу добавить некоторые из моих данных в charts.js, он не будет читать данные, которые имеют более 6 цифр. Более того, если есть число типа "653.598,36", оно принимает фактически два параметра, а именно (653,598 ; 36).

Форматирование чисел в python не помогает, поскольку charts.js не будет использовать строки для графиков. Использование параметра "locale = 'de-DE'" в опциях charts.js помогает только для обозначения свойств, но не для самих данных.

Если я изменю настройку Django обратно на "en-us", charts.js работает с числами, но мои числа на веб-странице не форматируются правильно для конечного пользователя.

Кто-нибудь сталкивался с этой проблемой и имеет ее решение?

Спасибо и наилучшие пожелания!

Здесь приведен код charts.js с примерами значений. Я использовал chart.js непосредственно в HTML-файле.

Примечание: Числа в разделе data - это просто примеры. Обычно в нем есть переменная, которая имеет значение.

Перед тем, как вставить числа в эту библиотеку, сделайте следующее: EDIT2: Я неправильно понял ваш вопрос, я думал, вы спрашиваете, как изменить форматы целых чисел с плавающей точкой.

let n = "653.598,36";
let result = "";
let decimalPart = n.split(",")[1];
let decimalPartLen = decimalPart.length;
n = n.replace(".",""); //parseFloat doesn't like commas
let commaIndex = n.length - decimalPartLen;
result = parseFloat(n.substr(0,commaIndex - 1)+"."+n.substr(commaIndex, n.length));
console.log(result);

EDIT: это js на стороне клиента, но вы можете сделать это в python с минимальными изменениями. Вот это в python:

n = "653.598,36"
result = ""
decimalPart = n.split(",")[1]
decimalPartLen = len(decimalPart)
n = n.replace(".","")
commaIndex = len(n) - decimalPartLen
result = float(n[:commaIndex-1]+"."+n[commaIndex:])
print(result)

Для похожей проблемы я использовал "options" и "tooltips" с обратными вызовами, часть моего решения.

options: {
                scales: {
                    xAxes: [{
                        type: 'time',
                        distribution: 'linear',
                        time: {
                            unit: 'day',
                            displayFormats: {
                                day: 'MMM DD'
                            }
                        }
                    }],
                    yAxes: [{
                        ticks: {
                            beginAtZero: true,
                            suggestedMax: 24,
                            precision: 1,
                            stepSize: 1,
                            callback: function (value, index, values) {
                                return value + ":00 Uhr";
                            }
                        }
                    }]
                },
            tooltips: {
                callbacks: {
                    label: function (tooltipItem, data) {
                        function getWDay(idx){
                            var wd = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
                            return wd[idx]
                        }
                        return getWDay(new Date(tooltipItem.xLabel).getDay())+", "+ tooltipItem.xLabel;
                    }
                }
            }
            }
        })
  1. Форматируйте данные, чтобы получить визуальное представление об аппликации
  2. .
  3. используйте шкалу и всплывающие подсказки для осей
  4. .
Вернуться на верх