javascript - 图表刻度问题

标签 javascript algorithm flot

我有一个带有自定义刻度格式化程序函数的 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 或 1001,它在两个刻度标签上返回 1K

我知道它的算法错误,我只是想知道有没有办法彻底修复它

注意事项

  1. 刻度必须最多四舍五入到小数点后两位(最好没有小数点)。
  2. 您不能更改 val/1000。您可以使用 Math.round() 函数玩一轮游戏。
  3. 即使要使用toFixed()也要遵循规则1

最佳答案

这是一个在保持准确性的同时对大数字使用后缀的解决方案:

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 不熟悉,但我想它会解决这个问题。)

关于javascript - 图表刻度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22695755/

相关文章:

javascript - Angular 中有 ng-repeat 的替代品吗?

c - 返回 1 或 0 的函数

jquery - 流程图 : graph doesn't reflect changes to data

animation - 浮图动画可能吗?

jquery - 增加flot饼图中的百分比字体大小

javascript - 如何对父 Div 中的 svg 元素进行拖动限制这意味着 Ex。拖动椭圆和矩形元素时没有超出框

javascript - momentjs 显示本地时间和自动格式字符串

javascript - 使用 JavaScript 创建 HTML 文件

c# - 繁重的计算分析/优化

regex - 使用perl在多个蛋白质序列中查找回文(完美回文)