将 javascript 中的长数字格式化为正确单位的最简单方法?

easiest way to format long numbers in javascript to the right unit?

我正在构建一个可以在网站上显示系统信息的网络应用程序。它显示“服务器”运行 所在的电脑的硬件信息(温度、内存、cpu、风扇速度等)。它打开一个 Web 服务器,显示可通过网络访问的此信息。我正在使用 meteor、blazejs 和 systeminformation ( https://github.com/sebhildebrandt/systeminformation ) 来执行此操作。系统信息显示它从服务器获取的信息为长数字。这是我的 html:

<template name="main">
{{#if subscriptionsReady}}

  <p>cpu manufacturer: {{get (static) 'data.cpu.manufacturer'}}</p>
  <p>cpu brand: {{get (static) 'data.cpu.brand'}}</p>
  <p>cpu model: {{get (static) 'data.cpu.model'}}</p>
  <p>cpu speed: {{get (static) 'data.cpu.speed'}}</p>
  <p>cpu cores: {{get (static) 'data.cpu.cores'}}</p>

  <p>total memory: {{get (dynamic) 'data.mem.total'}}</p>
  <p>free memory: {{get (dynamic) 'data.mem.free'}}</p>
  <p>used memory: {{get (dynamic) 'data.mem.used'}}</p>
  <p>active memory: {{get (dynamic) 'data.mem.active'}}</p>
{{/if}}

网站上显示的

我想将长数字格式化为看起来像“总内存 X.yz GB”和类似的不同数据。有没有我可以使用的易于使用的库?

还有我的服务器javascript文件

Meteor.startup(() => {

si.getStaticData(Meteor.bindEnvironment(function(data){
    Data.update({type: 'static'}, {data: data, type: 'static'}, {upsert: true})
}))

setInterval(Meteor.bindEnvironment(function() {

    si.getDynamicData(Meteor.bindEnvironment(function(data){
        Data.update({type: 'dynamic'}, {data: data, type: 'dynamic'}, {upsert: true})
    }))

}), 1000)

Meteor.publish('data', function(){
    return Data.find({})
})
});

和我的客户javascript

let subscriptions = [
  Meteor.subscribe('data')
]

Template.main.helpers({

  get: function(obj, what) {
      console.log(obj)
      return _.get(obj, what)
},

dynamic: function() {
    return Data.findOne({type: 'dynamic'})
},

static: function() {
    return Data.findOne({type: 'static'})
},

subscriptionsReady: function() {
    for (let sub of subscriptions){
        if (!sub.ready()) return false
    }
    return true
}
})

看看这个答案 - 这里有很多票

How to print a number with commas as thousands separators in JavaScript

tl;博士

function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

This is all you really need to know.

有非常流行的pretty-bytes库(MIT许可):

Convert bytes to a human readable string: 1337 → 1.34 kB

Useful for displaying file sizes for humans.

用法:

const prettyBytes = require('pretty-bytes');

prettyBytes(1337);
//=> '1.34 kB' 

prettyBytes(100);
//=> '100 B'

请注意,它以 10 为基数进行转换(即 1 GB = 1,000,000,000 B,就像存储制造商通常使用的那样)。

我猜你指的是 RAM 内存,我认为 制造商使用 base 2 转换报告(即 1 GiB = 1,024 * 1,024 * 1,024 B),你可能会对另一个流行的库感兴趣:filesize(BSD 3 条款许可)