如何对大数使用格式化

Posted

技术标签:

【中文标题】如何对大数使用格式化【英文标题】:How to use Formatting for large numbers 【发布时间】:2017-11-04 22:24:38 【问题描述】:

我这里有很多问题。我在 javascript 中使用 nFormatter 处理大量数字,但我不知道如何在现有代码中使用它。

这是我正在使用的格式化程序。

function nFormatter(num) 
    if (num >= 1000000000000) 
       return (num / 1000000000000).toFixed(1).replace(/\.0$/, '') + 'Trillion';
 
   if (num >= 1000000000) 
       return (num / 1000000000).toFixed(1).replace(/\.0$/, '') + 'Billion';
 
    if (num >= 1000000) 
       return (num / 1000000).toFixed(1).replace(/\.0$/, '') + 'Million';
 
    if (num >= 1000) 
       return (num / 1000).toFixed(1).replace(/\.0$/, '') + 'Thousand';
 
   return num;
 
nFormatter;

我需要将此代码添加到我的其他代码中,但我不确定该怎么做。

这是我当前的代码。

var gameProfit = 5000;

var tinyOwned = 0;

var tinyCost = 5000;

var tinyIncome = 0;

function tinyGamePlay() 
  if (gameProfit >= tinyCost) 
    tinyOwned++;
    gameProfit -= tinyCost;
    tinyIncome = 15000 * tinyOwned;
    tinyCost = 5000 * tinyOwned;


    document.getElementById('tiny-owned').innerhtml = tinyOwned;
    document.getElementById('tiny-income').innerHTML = "Income : $ " + tinyIncome;
    document.getElementById('tiny-cost').innerHTML = "Next Cost : $ " + tinyCost;
    document.getElementById('currentProfit').innerHTML = "Profit : $ " + gameProfit;
  

tinyGamePlay;

所以我的所有变量在某一时刻都将超过 1000,因此需要对我的所有变量使用格式化程序。

如果有人知道可以提供帮助的东西,我也不介意使用 JS 插件,

有人可以帮忙吗?

【问题讨论】:

nFormatter( tinyOwned ) ??!?! 小心,你距离 JavaScript 中的最大安全整数只有 9000 倍。如果你做的数学比这更大,你应该使用一个大数字库。 可以将数字转换为字符串,然后对字符串中三个索引的切片进行字符串操作,以数字表示千,见How do I add 1 to a big integer represented as a string in JavaScript? 非常感谢你们,我会研究大型图书馆 我打算和 Centillion 一样大,然后我将不得不自己编一个更大的数字名称,哈哈 【参考方案1】:

您只需要在打印输出时调用此nFormatter 函数,请参见下面的片段,对于更大的数字,您可以使用http://jsfromhell.com/classes/bignumber:

function nFormatter(num) 
    if (num >= 1000000000000) 
       return (num / 1000000000000).toFixed(1).replace(/\.0$/, '') + ' Trillion';
 
   if (num >= 1000000000) 
       return (num / 1000000000).toFixed(1).replace(/\.0$/, '') + ' Billion';
 
    if (num >= 1000000) 
       return (num / 1000000).toFixed(1).replace(/\.0$/, '') + ' Million';
 
    if (num >= 1000) 
       return (num / 1000).toFixed(1).replace(/\.0$/, '') + ' Thousand';
 
   return num;
 


    var gameProfit = 5100;

    var tinyOwned = 0;

    var tinyCost = 5000;

    var tinyIncome = 0;

    function tinyGamePlay() 
    	if (gameProfit >= tinyCost) 
    		tinyOwned++;
    		gameProfit -= tinyCost;
    		tinyIncome = 15000 * tinyOwned;
    		tinyCost = 5000 * tinyOwned;
    		
    		console.log(tinyCost);
    		document.getElementById('tiny-owned').innerHTML = nFormatter(tinyOwned);
    		document.getElementById('tiny-income').innerHTML = "Income : $ " + nFormatter(tinyIncome);
    		document.getElementById('tiny-cost').innerHTML = "Next Cost : $ " + nFormatter(tinyCost);
    		document.getElementById('currentProfit').innerHTML = "Profit : $ " + nFormatter(gameProfit);
    	
    
    tinyGamePlay();
<p id="tiny-owned"></p>
<p id="tiny-income"></p>
<p id="tiny-cost"></p>
<p id="currentProfit"></p>

【讨论】:

非常感谢,这是完美的 - 我真的很感谢这个帮助兄弟,我尝试了 3 天来让它工作

以上是关于如何对大数使用格式化的主要内容,如果未能解决你的问题,请参考以下文章

如何将大数(例如 1.23e29)转换为 IEEE 754 单精度浮点格式?

如何摆脱熊猫将excel表中的大数转换为指数?

SQlite 大数用逗号分隔

#yyds干货盘点#JS两个大数相加

Spark 支持 gzip 格式吗?

模拟--大数加法