2

How can a bot convert number with "e" (3e6) to a full number (3,000,000)?

Here's an example:

USER: !donation add @USER2 3e6

BOT: ✔️Added 3,000,000 coins to @USER2's donations.

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)
            }

    }
}

Thanks.

Fl1ck
  • 35
  • 3

2 Answers2

1

A simple parse function

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 
AnanthDev
  • 1,605
  • 1
  • 4
  • 14
0

Simply use 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
MrMythical
  • 8,908
  • 2
  • 17
  • 45