5

如何格式化 jqplot 中的刻度以处理 , 和 . 和“”取决于我所在的地区。

例如。

  • 欧洲 - 1.000,00
  • 美国 - 1,000.00
  • 其他 1 000,00

我的示例 jqplot 初始化看起来像....

plot3 = $.jqplot('saturationChart', lineArray, 
         { 
          title:m_Language.saturationChartName,
          series:lineColor,
          legend:{show:true, location:'se'},
          // You can specify options for all axes on the plot at once with
          // the axesDefaults object.  Here, we're using a canvas renderer
          // to draw the axis label which allows rotated text.
          axes:{
            xaxis:{
//            label:'Minutes',
              renderer: $.jqplot.LogAxisRenderer,
              tickDistribution:'power',
              labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
              labelOptions: {
                //fontSize: '12pt'
              },
            },
            yaxis:{
//            label:'Megaohms',
              renderer: $.jqplot.LogAxisRenderer,
              tickDistribution:'power',
              labelRenderer: $.jqplot.CanvasAxisLabelRenderer,
              labelOptions: {
                //fontSize: '12pt'
              }
            },
          }
      });

我查看了文档,但我不确定我需要寻找哪些关键字......任何帮助将不胜感激

4

1 回答 1

12

基于,您可以使用如下格式字符串:

yaxis: {
    tickOptions: { formatString: "%'.2f" },
    min : 0
}

该格式字符串与值一起作为对$.jqplot.sprintf. 然后,您可以按如下方式设置分隔符:

$.jqplot.sprintf.thousandsSeparator = ',';
$.jqplot.sprintf.decimalMark = '.';

所以这段代码:

var value = 10000;
$.jqplot.sprintf.thousandsSeparator = '.';
$.jqplot.sprintf.decimalMark = ',';
console.log($.jqplot.sprintf("European %'.2f", value));

$.jqplot.sprintf.thousandsSeparator = ' ';
$.jqplot.sprintf.decimalMark = ',';
console.log($.jqplot.sprintf("Other %'.2f", value));

$.jqplot.sprintf.thousandsSeparator = ',';
$.jqplot.sprintf.decimalMark = '.';
console.log($.jqplot.sprintf("US %'.2f", value));

会产生这个:

European 10,000.00 
Other 10 000,00 
US 10,000.00 

但是,看看欧洲的和美国的一样吗?当这些分隔符设置被更改时,它会导致字符串替换,因此为什么欧洲人会像这样结束:用句点替换逗号,然后用逗号替换句点会给您返回原始字符串。

因此,您需要提供自定义刻度格式化方法,以便您可以即时应用这些设置,然后进行字符串替换:

yaxis: {
    tickOptions: {
        tickOptions: { formatString: "%'.2f" },
        formatter: function(format, value){
            return FormatTick(format, value);
        }
    }
}

....

function FormatTick(format, value) {
    var prevThousandsSeparator = $.jqplot.sprintf.thousandsSeparator;
    var prevDecimalMark = $.jqplot.sprintf.decimalMark;

    $.jqplot.sprintf.thousandsSeparator = '#';
    $.jqplot.sprintf.decimalMark = '_';

    var formattedValue = $.jqplot.sprintf(format, value);
    formattedValue = formattedValue.replace($.jqplot.sprintf.decimalMark, Language.DecimalMark)
        .replace($.jqplot.sprintf.thousandsSeparator, Language.ThousandsSeparator);

    $.jqplot.sprintf.thousandsSeparator = prevThousandsSeparator;
    $.jqplot.sprintf.decimalMark = prevDecimalMark;

    return formattedValue;
}

这意味着您还需要一些方便的机制来建立用户的区域设置和要使用的正确分隔符。我以这种方式保存和恢复thousandsSeparatoranddecimalMark字符只是为了确保以这种方式设置它们不会在其他地方造成意外问题。

另请注意,我的解决方案假定#and_字符不会在您要格式化的值中。如果不是这样,请将FormatTick方法中的分隔符修改为更合适的内容。

于 2013-02-02T10:18:06.003 回答