问题描述
机器人如何将带有“e”的数字 (3e6) 转换为完整数字 (3,000,000)?
这是一个例子:
用户: !donation add @USER2 3e6
机器人: ✔️向@USER2 的捐款添加了 3,000 个硬币。
const db = require("quick.db");
module.exports = {
name: "donation",aliases: ["dono","donate"],category: "donation tracker",description: "Adds/Removes money to/from a user",usage: "donation add/remove @user <Amount>",accessableby: "Moderators",run: async (bot,message,args) => {
if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send("❌ You Do Not Have Permission to do this action! - [MANAGE_MESSAGES]");
if (!args[1]) return message.channel.send(' ```_donation add @User <Amount>\n ^^^^\nThis argument is missing.``` ')
if (args[0] == 'add') {
let user = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args[0].toLocaleLowerCase());
if (!user) return message.channel.send(" ```_donation add @User <Amount>\n ^^^^^\nThis argument is missing or invalid``` ")
if (!args[2]) return message.channel.send(" ```_donation add @User <Amount>\n ^^^^^^\nThis argument is missing.``` ")
if (isNaN(args[2])) return message.channel.send(' ```_donation add @User <Amount>\n ^^^^^^\nThis argument is invalid.``` ');
db.add(`money_${user.id}`,args[2])
let bal = db.fetch(`money_${user.id}`)
let moneyEmbed = new MessageEmbed()
.setColor("GREEN")
.setDescription(`<a:orion_done:855857744590536764> Added **${args[2]}** coins to ${args[1]}'s donations.`);
message.channel.send(moneyEmbed)
}
if (args[0] == 'remove') {
let user2 = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.guild.members.cache.find(r => r.user.username.toLowerCase() === args[0].toLocaleLowerCase()) || message.guild.members.cache.find(r => r.displayName.toLowerCase() === args[0].toLocaleLowerCase());
if (!user2) return message.channel.send(" ```_donation add @User <Amount>\n ^^^^^\nThis argument is missing or invalid``` ")
if (!args[2]) return message.channel.send(" ```_donation add @User <Amount>\n ^^^^^^\nThis argument is missing.``` ")
if (isNaN(args[2])) return message.channel.send(' ```_donation add @User <Amount>\n ^^^^^^\nThis argument is invalid.``` ');
db.subtract(`money_${user2.id}`,args[2])
let bal = db.fetch(`money_${user2.id}`)
let moneyEmbed = new MessageEmbed()
.setColor("RED")
.setDescription(`<a:verifiedorange:838473291646894151> Removed **${args[2]}** coins from ${args[1]}'s donations.`);
message.channel.send(moneyEmbed)
}
}
}
谢谢。
解决方法
一个简单的解析函数
function parse(num) {
if (typeof num !== 'string') throw new TypeError('Parse parameters must be a string');
if (num.includes('e')) {
const arr = num.split('e');
const power = parseInt(arr[1]);
const base = parseInt(arr[0]);
const o = base * Math.pow(10,power);
return o;
}
}
console.log(parse('2e5')); // returns 200000
,
只需使用 parseFloat
:
parseFloat(1) //1
parseFloat('1') //1
parseFloat('lol') //NaN
parseFloat('3e6') //3000000
parseFloat('1.2e2') //120
parseFloat(1.2e2) //120
parseFloat('1.2') //1.2
parseFloat(1.2) //1.2