Как добавить значения в JavaScript при конвертации из строки - PullRequest
0 голосов
/ 24 марта 2019

У меня есть строка, которую я пытаюсь преобразовать в десятичное число с 16 десятичными знаками.Затем я хотел бы добавить это число к числу 0, которое должно быть:

30280.9529335

Но я получаю: 030280.9529335

Как вы правильно делаете это в JavaScript?

var totalnumber = 0; var str = "30280.9529335";
totalnumber = totalnumber + ConvertToDouble(str);

console.log(totalnumber); //030280.9529335

function ConvertToDouble(x) {
    return Number.parseFloat(x).toFixed(16);
}

Ответы [ 2 ]

1 голос
/ 24 марта 2019

Ну, ваша проблема - размещение toFixed, toFixed возврат String не число

console.log(typeof (1).toFixed(2))

Так что здесь ваша ConvertToDouble функция возвращает string, а 0 + some numeric string будет действовать как объединение, а не сложение

var totalnumber = 0; var str = "30280.9529335";
totalnumber = totalnumber + ConvertToDouble(str);

console.log(totalnumber.toFixed(16)); //030280.9529335

function ConvertToDouble(x) {
    return Number.parseFloat(x)
}
0 голосов
/ 24 марта 2019

Вы можете использовать Number.parseFloat и Number.parseInt аналогично тому, как вы были.Вы неправильно использовали toFixed.

Метод toFixed() преобразует число в строку, сохраняя указанное количество десятичных знаков.Если желаемое количество десятичных дробей больше, чем фактическое число, добавляются нулевые значения для создания желаемой десятичной длины.

Пример:

let a = "30280.9529335";
console.log(parseFloat(a))
// 30280.9529335

let totalnumber = 0;
let str = "30280.9529335";

function convert(a, b) {
    try {
        return (Number.parseInt(a) + Number.parseFloat(b)).toFixed(16)
    } catch(error) {
        return error;
    }
}

function convertb(a, b) {
    try {
        return Number.parseInt(a) + Number.parseFloat(b)
    } catch(error) {
        return error;
    }
}

   console.log(convert(totalnumber, str))
   console.log(convertb(totalnumber, str))

Вы также можете использовать bigInts https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt

const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991n
const hugeString = BigInt("9007199254740991");
// ↪ 9007199254740991n
const hugeHex = BigInt("0x1fffffffffffff");
// ↪ 9007199254740991n
const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
// ↪ 9007199254740991n
...