javascript - 将 toFixed 添加到现有 Math.abs 函数

标签 javascript math tofixed

我一直在尝试使用一个函数来尝试显示带有文本后缀的某些较大的基数。不过,我想对其进行扩展,以便我可以调用 toFixed 来省略所有小数 (toFixed(0))。我已经尝试了所有可能的组合以及变量本身,但我似乎无法让它工作......

我不想显示小数的函数是:

function cardinalNumbers(numericalValue) {
// Twenty Four Zeroes For Septillions.

return Math.abs(Number(numericalValue)) >= 1.0e+24
   ? Math.abs(Number(numericalValue)) / 1.0e+24 + "S"

   // Twnty One Zeroes For Sextillions.
   : Math.abs(Number(numericalValue)) >= 1.0e+21
   ? Math.abs(Number(numericalValue)) / 1.0e+21 + "s"

   // Eighteen Zeroes For Quintillions.
   : Math.abs(Number(numericalValue)) >= 1.0e+18
   ? Math.abs(Number(numericalValue)) / 1.0e+18 + "Q"

   // Fifteen Zeroes For Quadrillion.
   : Math.abs(Number(numericalValue)) >= 1.0e+15
   ? Math.abs(Number(numericalValue)) / 1.0e+15 + "q"

   // Twelve Zeroes For Trillions.
   : Math.abs(Number(numericalValue)) >= 1.0e+12
   ? Math.abs(Number(numericalValue)) / 1.0e+12 + "T" 

   // Nine Zeroes For Billions.
   : Math.abs(Number(numericalValue)) >= 1.0e+9
   ? Math.abs(Number(numericalValue)) / 1.0e+9 + "B"

   // Six Zeroes For Millions.
   : Math.abs(Number(numericalValue)) >= 1.0e+6
   ? Math.abs(Number(numericalValue)) / 1.0e+6 + "M"

   // Three Zeroes For Thousands.
   : Math.abs(Number(numericalValue)) >= 1.0e+3
   ? Math.abs(Number(numericalValue)) / 1.0e+3 + "K"

   : Math.abs(Number(numericalValue));
}

例如,227155515434853440 格式为 227q。

最佳答案

您必须在返回值的每个点调用.toFixed(0),并且可能是像 Bartek 建议的变量:

function cardinalNumbers(numericalValue) {

    var x = Math.abs(Number(numericalValue));
    // Twenty Four Zeroes For Septillions.
    return x >= 1.0e+24
    ? (x / 1.0e+24).toFixed(0) + "S"

    // Twnty One Zeroes For Sextillions.
    : x >= 1.0e+21
    ? (x / 1.0e+21).toFixed(0) + "s"

    // Eighteen Zeroes For Quintillions.
    : x >= 1.0e+18
    ? (x / 1.0e+18).toFixed(0) + "Q"

    // Fifteen Zeroes For Quadrillion.
    : x >= 1.0e+15
    ? (x / 1.0e+15).toFixed(0) + "q"

    // Twelve Zeroes For Trillions.
    : x >= 1.0e+12
    ? (x / 1.0e+12).toFixed(0) + "T" 

    // Nine Zeroes For Billions.
    : x >= 1.0e+9
    ? (x / 1.0e+9).toFixed(0) + "B"

    // Six Zeroes For Millions.
    : x >= 1.0e+6
    ? (x / 1.0e+6).toFixed(0) + "M"

    // Three Zeroes For Thousands.
    : x >= 1.0e+3
    ? (x / 1.0e+3).toFixed(0) + "K"

    : x.toFixed(0);
}

或者,如果您可以使用数组并希望使用相同的构造,则可以使用 .toFixed(0) 一次。但我不喜欢使用三元运算符进行那么多分支,所以我宁愿使用 if-elseif-else block :

function cardinalNumbers(numericalValue) {
    var result = [];
    var x = Math.abs(Number(numericalValue));
    if (x >= 1.0e+24) {
        // Twenty Four Zeroes For Septillions.
        result = [x / 1.0e+24, "S"];
    } else if (x >= 1.0e+21) {
        // Twenty One Zeroes For Sextillions.
        result = [x / 1.0e+21, "s"];
    } else if (x >= 1.0e+18) {
        // Eighteen Zeroes For Quintillions.
        result = [x / 1.0e+18, "Q"];
    } else if (x >= 1.0e+15) {
        // Fifteen Zeroes For Quadrillion.
        result = [x / 1.0e+15, "q"];
    } else if (x >= 1.0e+12) {
        // Twelve Zeroes For Trillions.
        result = [x / 1.0e+12, "T"];
    } else if (x >= 1.0e+9) {
        // Nine Zeroes For Billions.
        result = [x / 1.0e+9, "B"];
    } else if (x >= 1.0e+6) {
        // Six Zeroes For Millions.
        result = [x / 1.0e+6, "M"];
    } else if (x >= 1.0e+3) {
        // Three Zeroes For Thousands.
        result = [x / 1.0e+3, "K"];
    } else {
        result = [x, ""];
    }
    return result[0].toFixed(0) + result[1];
}

关于javascript - 将 toFixed 添加到现有 Math.abs 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441006/

相关文章:

javascript - 将窗口移至iframe,而无需重新加载

javascript - 为什么在多次调用时闭包函数中的 javascript 变量不会重置为默认值?

c++ - Matrix Hell - 将 3D 纹理中的点转换为世界空间

javascript - 显示总计(保留 2 位小数)

javascript - toFixed() 不能很好地处理数组

javascript - 用适当的替换覆盖 toFixed() 以修复浮点错误 javascript

javascript - 设置仅值属性而不是键值

javascript - 如何在 Internet Explorer 的菜单中调试 "Wiggle"

c++ - 计算 e^x 的近似值时出错

algorithm - 在圆形碰撞和旋转方面需要帮助吗? - 游戏物理