我有一个带有自定义刻度格式函数的flot
图表,
if ((val / 1000) >= 1) {
val = String(Math.round(val / 1000)) + 'K';
}
return String(val);
但问题是它为某些刻度返回相同的值。
关于代码的一点解释:
val --> any integer value ranging from 1 to infinity
val / 1000
逻辑是将tick转换为用户朋友(可读)格式(1K,2K等)。
但问题是,当某些val
向上舍入到相等的值时,我会重复勾选标签。
它想知道修复此算法的任何好方法来计算它吗?
val / 1000
并不意味着val是1000
的倍数,它可以是从1到无穷大的任何整数值。
例如:对于val = 1000 or 1001
,它会在两个刻度标签上返回1K
。
我知道它的算法错误。我只是想知道是否有任何方法可以彻底修复它
val / 1000
。您可以使用Math.round()
功能进行游戏。toFixed()
使用规则1 答案 0 :(得分:2)
这是一个在保持准确性的同时使用大数字后缀的解决方案:
function tick_label(val) {
if (val < 0) return "\u2212" + tick_label(-val);
if (val < 1000) return String(val);
var mag = 1;
var suffix = "";
if (val >= 1000) { mag = 1000; suffix = "k" }
if (val >= 1000000) { mag = 1000000; suffix = "M" }
if (val >= 1000000000) { mag = 1000000000; suffix = "G" }
var div = mag;
while (val % 10 == 0) {
val /= 10;
div /= 10;
}
return String(val / div) + suffix;
}
此代码依赖于刻度的圆数,因此确切的数字看起来并不奇怪或过于精确。 (1.002k,1.004k,1.006k的比例看起来没问题,但是1.102k,1.202k,1.302k的比例没有。我不熟悉Flot,但我想它会照顾它。)