重新写了大数格式输出

This commit is contained in:
枫谷剑仙 2020-12-17 13:29:33 +08:00
parent 04726128e5
commit f98dca832c
5 changed files with 109 additions and 40 deletions

View File

@ -23,4 +23,35 @@
force_reload_data: "データの強制更新",
}
//大数字缩短长度
Number.prototype.bigNumberToString = function()
{
let numTemp = this.valueOf();
if (!numTemp) return "0";
const grouping = Math.pow(10, 4);
const unit = ['','万','億','兆','京','垓'];
const numParts = [];
do{
numParts.push(numTemp % grouping);
numTemp = Math.floor(numTemp / grouping);
}while(numTemp>0 && numParts.length<(unit.length-1))
if (numTemp>0)
{
numParts.push(numTemp);
}
let numPartsStr = numParts.map((num,idx)=>{
if (num > 0)
{
return (num < 1e3 ? "と" : "") + num.toLocaleString() + unit[idx];
}else
return "と";
});
numPartsStr.reverse(); //反向
let outStr = numPartsStr.join("");
outStr = outStr.replace(/(^と+|と+$)/g,''); //去除开头的零
outStr = outStr.replace(/と{2,}/g,'と'); //去除多个连续的零
return outStr;
}
localisation(localTranslating);

View File

@ -1,5 +1,36 @@
document.title = `智龙迷城${teamsCount}人队伍图制作工具`;
//大数字缩短长度
Number.prototype.bigNumberToString = function()
{
let numTemp = this.valueOf();
if (!numTemp) return "0";
const grouping = Math.pow(10, 4);
const unit = ['','万','亿','兆','京','垓'];
const numParts = [];
do{
numParts.push(numTemp % grouping);
numTemp = Math.floor(numTemp / grouping);
}while(numTemp>0 && numParts.length<(unit.length-1))
if (numTemp>0)
{
numParts.push(numTemp);
}
let numPartsStr = numParts.map((num,idx)=>{
if (num > 0)
{
return (num < 1e3 ? "零" : "") + num.toLocaleString() + unit[idx];
}else
return "零";
});
numPartsStr.reverse(); //反向
let outStr = numPartsStr.join("");
outStr = outStr.replace(/(^零+|零+$)/g,''); //去除开头的零
outStr = outStr.replace(/零{2,}/g,'零'); //去除多个连续的零
return outStr;
}
//查找原先完整技能
function findFullSkill(subSkill){
const parentSkill = Skills.find(ss=>(ss.type === 116 || ss.type === 118 || ss.type === 138) && ss.params.includes(subSkill.id)) || subSkill;
@ -230,7 +261,7 @@ function parseSkillDescription(skill)
str = `对敌方全体造成自身攻击力×${sk[1]/100}倍的${attrN(sk[0])}属性伤害`;
break;
case 1:
str = `对敌方全体造成${parseBigNumber(sk[1])}${attrN(sk[0])}属性伤害`;
str = `对敌方全体造成${sk[1].bigNumberToString()}${attrN(sk[0])}属性伤害`;
break;
case 2:
str = `对敌方1体造成自身攻击力×${sk[0]/100}${sk[1]&&sk[1]!=sk[0]?'~'+sk[1]/100:''}倍的自身属性伤害`;
@ -344,7 +375,7 @@ function parseSkillDescription(skill)
str = `受到敌人攻击时${sk[0]==100?"":`${sk[0]}的几率`}进行受到伤害${sk[1]/100}倍的${attrN(sk[2])}属性反击`;
break;
case 42:
str = `${attrN(sk[0])}属性敌人造成${parseBigNumber(sk[2])}${attrN(sk[1])}属性伤害`;
str = `${attrN(sk[0])}属性敌人造成${sk[2].bigNumberToString()}${attrN(sk[1])}属性伤害`;
break;
case 43:
str = `HP ${sk[0]==100 ?"全满":`${sk[0]}%以上`}${sk[1]<100?`${sk[1]}%的几率使`:""}受到的伤害减少${sk[2]}%`;
@ -379,10 +410,10 @@ function parseSkillDescription(skill)
str = `进入地下城时为队长的话,获得的金币×${sk[0]/100}`;
break;
case 55:
str = `对敌方1体造成${parseBigNumber(sk[0])}点无视防御的固定伤害`;
str = `对敌方1体造成${sk[0].bigNumberToString()}点无视防御的固定伤害`;
break;
case 56:
str = `对敌方全体造成${parseBigNumber(sk[0])}点无视防御的固定伤害`;
str = `对敌方全体造成${sk[0].bigNumberToString()}点无视防御的固定伤害`;
break;
case 58:
str = `对敌方全体造成自身攻击力×${sk[1]/100}${sk[2]&&sk[2]!=sk[1]?'~'+sk[2]/100:''}倍的${attrN(sk[0])}属性伤害`;
@ -461,11 +492,11 @@ function parseSkillDescription(skill)
str = `HP ${(sk[3]?(`减少${100-sk[3]}%`):"变为1")},对敌方全体造成自身攻击力×${sk[1]/100}${sk[2]&&sk[2]!=sk[1]?'~'+sk[2]/100:''}倍的${attrN(sk[0])}属性伤害`;
break;
case 86:
str = `HP ${(sk[3]?(`减少${100-sk[3]}%`):"变为1")}对敌方1体造成${parseBigNumber(sk[1])}${attrN(sk[0])}属性伤害`;
str = `HP ${(sk[3]?(`减少${100-sk[3]}%`):"变为1")}对敌方1体造成${sk[1].bigNumberToString()}${attrN(sk[0])}属性伤害`;
if (sk[2]) str += `未知 参数2 ${sk[2]}`;
break;
case 87:
str = `HP ${(sk[3]?(`减少${100-sk[3]}%`):"变为1")},对敌方全体造成${parseBigNumber(sk[1])}${attrN(sk[0])}属性伤害`;
str = `HP ${(sk[3]?(`减少${100-sk[3]}%`):"变为1")},对敌方全体造成${sk[1].bigNumberToString()}${attrN(sk[0])}属性伤害`;
if (sk[2]) str += `未知 参数2 ${sk[2]}`;
break;
case 88:
@ -562,7 +593,7 @@ function parseSkillDescription(skill)
li.setAttribute("data-skillid", repeatSkill[0]);
li.addEventListener("click",fastShowSkill);
li.appendChild(parseSkillDescription(Skills[repeatSkill[0]]));
li.appendChild(document.createTextNode(`×${repeatSkill.length}次(共${parseBigNumber(repeatDamage[0]*repeatSkill.length)}`));
li.appendChild(document.createTextNode(`×${repeatSkill.length}次(共${(repeatDamage[0]*repeatSkill.length).bigNumberToString()}`));
noRepeatSk = sk.filter(subSkill => Skills[subSkill].type !== 188);
}else
{
@ -1166,7 +1197,7 @@ function parseSkillDescription(skill)
if (sk[3] || sk[4] || sk[5]) str += "的"+getFixedHpAtkRcvString({hp:sk[3],atk:sk[4],rcv:sk[5]});
break;
case 179:
str = `${sk[0]}回合内,每回合回复${sk[1]?`${parseBigNumber(sk[1])}`:` HP 上限 ${sk[2]}%`}的 HP`;
str = `${sk[0]}回合内,每回合回复${sk[1]?`${sk[1].bigNumberToString()}`:` HP 上限 ${sk[2]}%`}的 HP`;
if(sk[3] || sk[4])
{
str += `,并将`;
@ -1207,7 +1238,7 @@ function parseSkillDescription(skill)
if (sk[0] || sk[1]) str += getAttrTypeString(flags(sk[0]),flags(sk[1])) + "宠物的" + getFixedHpAtkRcvString({hp:sk[2],atk:sk[3],rcv:sk[4]});
break;
case 188: //多次单体固伤
str = `对敌方1体造成${parseBigNumber(sk[0])}点无视防御的固定伤害`;
str = `对敌方1体造成${sk[0].bigNumberToString()}点无视防御的固定伤害`;
break;
case 189:
//解除寶珠的鎖定狀態所有寶珠變成火、水、木、光顯示3COMBO的轉珠路徑只適用於普通地下城3個消除
@ -1263,7 +1294,7 @@ function parseSkillDescription(skill)
break;
case 198:
//以回復寶珠回復40000HP或以上時受到的傷害減少50%
str = `以回复宝珠回复${parseBigNumber(sk[0])}点或以上时`;
str = `以回复宝珠回复${sk[0].bigNumberToString()}点或以上时`;
if (sk[1] && sk[1] != 100) str += `所有宠物的${getFixedHpAtkRcvString({atk:sk[1]})}`;
if (sk[2]) str += `,受到的伤害减少${sk[2]}%`;
if (sk[3]) str += `,觉醒无效状态减少${sk[3]}回合`;
@ -1285,10 +1316,10 @@ function parseSkillDescription(skill)
}
if (!atSameTime) str+=`${sk[1]}种属性以上`;
else if(sk[0] == 31) str += `5色`;
str += `同时攻击时,追加${parseBigNumber(sk[2])}点固定伤害`;
str += `同时攻击时,追加${sk[2].bigNumberToString()}点固定伤害`;
break;
case 200:
str = `相连消除${sk[1]}个或以上的${getOrbsAttrString(sk[0],true)}宝珠时,追加${parseBigNumber(sk[2])}点固定伤害`;
str = `相连消除${sk[1]}个或以上的${getOrbsAttrString(sk[0],true)}宝珠时,追加${sk[2].bigNumberToString()}点固定伤害`;
break;
case 201:
fullColor = sk.slice(0,4).filter(c=>c>0); //最多4串珠
@ -1301,7 +1332,7 @@ function parseSkillDescription(skill)
{//光寶珠有2COMBO或以上時
str = `${nb(fullColor[0], attrsName).join("、")}宝珠有${sk[4]}串或以上时`;
}
if (sk[5]) str += `,追加${parseBigNumber(sk[5])}点固定伤害`;
if (sk[5]) str += `,追加${sk[5].bigNumberToString()}点固定伤害`;
break;
case 202:
fragment.appendChild(document.createTextNode("变身为"));
@ -1395,24 +1426,6 @@ function parseSkillDescription(skill)
//(skill.description.length?(descriptionToHTML(skill.description) + "<hr>"):"") + str
return fragment;
}
//大数字缩短长度
function parseBigNumber(number)
{
if (number === 0)
{
return number.toLocaleString();
}else if (number % 1e8 === 0)
{
return (number / 1e8).toLocaleString() + " 亿";
}else if (number % 1e4 === 0)
{
return (number / 1e4).toLocaleString() + " 万";
}else
{
return number.toLocaleString();
}
}
//增加特殊搜索模式
(function() {

View File

@ -23,4 +23,35 @@
force_reload_data: "強制刷新數據",
}
//大數字縮短長度
Number.prototype.bigNumberToString = function()
{
let numTemp = this.valueOf();
if (!numTemp) return "0";
const grouping = Math.pow(10, 4);
const unit = ['','萬','億','兆','京','垓'];
const numParts = [];
do{
numParts.push(numTemp % grouping);
numTemp = Math.floor(numTemp / grouping);
}while(numTemp>0 && numParts.length<(unit.length-1))
if (numTemp>0)
{
numParts.push(numTemp);
}
let numPartsStr = numParts.map((num,idx)=>{
if (num > 0)
{
return (num < 1e3 ? "零" : "") + num.toLocaleString() + unit[idx];
}else
return "零";
});
numPartsStr.reverse(); //反向
let outStr = numPartsStr.join("");
outStr = outStr.replace(/(^零+|零+$)/g,''); //去除開頭的零
outStr = outStr.replace(/零{2,}/g,'零'); //去除多個連續的零
return outStr;
}
localisation(localTranslating);

View File

@ -58,18 +58,12 @@ Number.prototype.prefixInteger = function(length, useGrouping = false)
minimumIntegerDigits: length
});
}
//数字补前导0
Number.prototype.parseBigNumber = function()
//大数字缩短长度,默认返回本地定义字符串
Number.prototype.bigNumberToString = function()
{
return this.toLocaleString();
}
//大数字缩短长度,默认返回本地定义字符串
function parseBigNumber(number)
{
return number.toLocaleString();
}
//数组删除自己尾部的空元素
Array.prototype.DeleteLatter = function(item = null)
{

View File

@ -1778,7 +1778,7 @@ function initialize() {
level: level
};
const needExp = calculateExp(tempMon);
monLvExp.textContent = needExp ? needExp[0].parseBigNumber() + (level > 99 ? ` + ${needExp[1].parseBigNumber()}` : "") : "";
monLvExp.textContent = needExp ? needExp[0].bigNumberToString() + (level > 99 ? ` + ${needExp[1].bigNumberToString()}` : "") : "";
}
editBox.reCalculateExp = reCalculateExp;
//三维