Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.03.2019, 21:52
Аспирант
Отправить личное сообщение для alex-romanov Посмотреть профиль Найти все сообщения от alex-romanov
 
Регистрация: 02.02.2019
Сообщений: 67

Убрать эскпоненциальную запись числа
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>

</head>
<body>
<hr/>
<h2> 1 000 </h2>
<div class="thousand">

</div>

<h2> 10 000 </h2>
<div class="thousand10">
</div>


<h2> 100 000 </h2>
<div class="thousand100">
</div>

<h2> 1 000 000 </h2>
<div class="thousand1000">
</div>

<script>

    /*выбираем из строки только числа,
    * перед тем как вернуть в точку вызова результат,
    * проверяем, что результат - имеет тип данных number;
    * parseInt() - преобразование строки в число;
    * num - число*/
    function parseStrAndConverseToNumber(str) {

        var strDigitsOnly = str.toString().replace(/\D+/g, '');

       // var num = BigInt(strDigitsOnly);

    //    var num = str.toPrecision(100).split('.')[0];

        if (typeof(num) === "bigint") {

            return num;

        } else {
            throw new TypeError("This is not number!");
        }
    }


    var thousandSeparator = function (number) {
        var parts = (number );
        var main = parts[0];
        var len = main.length;
        var output = '';
        var i = len - 1;

        while (i >= 0) {
            output = main.charAt(i) + output;
            if ((len - i) % 3 === 0 && i > 0) {
                output = ' ' + output;
            }
            --i;
        }

        if (parts.length > 1) {
            output += '.' + parts[1];
        }
        return output;
    };


    /* Начало --- Получение из строки только чисел и преобразовние из в тип
    * данных - number*/
    // var numberStr = " 10#434!!!!@@@@++===()&(?23.23dfd2,25fg  4 ";
  var numberStr = " 123 43434 343 43434 3434 5410 ";
    //var numberStr = "";

  $('.thousand').html(parseStrAndConverseToNumber(numberStr)).css({
        'color': 'blue',
        'font-weight': 'bold'
    });

    /* Конец --- Получение из строки только чисел и преобразовние из в тип

  * данных - number*/

    var n = 123434343434343434345410;

    $('.thousand10').html(thousandSeparator(123434343434343434345410)).css({
        'color': 'blue',
        'font-weight': 'bold'
    });
    $('.thousand100').html(thousandSeparator(n)).css({
        'color': 'blue',
        'font-weight': 'bold'
    });
    $('.thousand1000').html(thousandSeparator(125434343431000)).css({
        'color': 'blue',
        'font-weight': 'bold'
    });

</script>
</body>
</html>


Как преобразовать очень большое число в строку?

Метод toFixed() - не работает,
toString() или String(var) - записывают результат в экспоненциальной форме.

Вот такое число, 123434343434343434345410 , как преобразовать в строку ?

И как выполнить преобразование строки в число, чтобы не было экспоненциальной формы записи ?

Мне то в начале нужно преобразовать строку, убрать разделители и получить число, дальше положить число в JSON.

Число будет положено в экспоненциальном формате, мне это не нужно.

Когда число получаю из базы, его нужно преобразовать в строку, чтобы разделить на разряды и вывести в ячейке таблицы, на странице клиента.


Большое число из базы , в метод приходит вот в таком виде

1.2343434343434343e+23

Как его преобразовать в строку в удобочитаемый вид , без потери точности ?

А вот такая строка " 12 3434 343 3434 4343 23434 45410" , когда убираю разделители, нужно такую строку тоже преобразовать в число, но мне не нужно экспоненциальная форма, мне нужно на сервер отправить число не в экспоненциальном виде


Как это сделать, чтобы и работало под старыми браузерами, например,
IE 11.

Что то типа toPresicion() или BigInt() - не будет работать.

Последний раз редактировалось alex-romanov, 30.03.2019 в 21:56.
Ответить с цитированием
  #2 (permalink)  
Старый 30.03.2019, 22:16
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от alex-romanov
Вот такое число, 123434343434343434345410 , как преобразовать в строку ?
Никак, это число больше, чем самое большое число, которое может быть представлено без потери точности! Работайте со строками, получайте ответ от сервера в виде строки!
Ответить с цитированием
  #3 (permalink)  
Старый 31.03.2019, 06:24
Аспирант
Отправить личное сообщение для alex-romanov Посмотреть профиль Найти все сообщения от alex-romanov
 
Регистрация: 02.02.2019
Сообщений: 67

1234 3434 3434 3434 3
С этим то же нельзя ничего сделать, только строки ?
Ответить с цитированием
  #4 (permalink)  
Старый 31.03.2019, 11:11
Аспирант
Отправить личное сообщение для alex-romanov Посмотреть профиль Найти все сообщения от alex-romanov
 
Регистрация: 02.02.2019
Сообщений: 67

вообщем думаю, что номера кредитных карт хранить только в строковом значении.

А вот такой максимум для вычисления прибыли думаю достаточно

var numberStr = " 1 999 999 999 999 999 ";

вряд ли у кого есть потребность вычислять такие суммы. Больше не получиться, так как при преобразовании
уже видна погрешность

/*выбираем из строки только числа,
    * перед тем как вернуть в точку вызова результат,
    * проверяем, что результат - имеет тип данных number;
    * parseInt() - преобразование строки в число;
    * num - число*/
    function parseStrAndConverseToNumber(str) {

        var strDigitsOnly = str.toString().replace(/\D+/g, '');

        var num = parseInt(strDigitsOnly);

        if (typeof(num) === "number") {

            return num;

        } else {
            throw new TypeError("This is not number!");
        }
    }

Последний раз редактировалось alex-romanov, 31.03.2019 в 11:21.
Ответить с цитированием
  #5 (permalink)  
Старый 31.03.2019, 12:04
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от alex-romanov
Больше не получиться, так как при преобразовании
уже видна погрешность
Если вы хотите производить арифметические действия с большими числами, то можете использовать библиотеку, например, big.js
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простые числа, не превосходящие заданного числа. jutochka123 Общие вопросы Javascript 2 30.09.2017 13:05
Анимация числа, при изменении ширина HTML элемента akkord87 Общие вопросы Javascript 10 15.12.2015 15:43
getUserMedia() как отследить последующие изменения разрешений на запись? Amateur Элементы интерфейса 0 20.10.2015 22:30
JS задача. Взаимно простые числа sashok Общие вопросы Javascript 5 23.11.2014 10:16
Есть числа от (0 до 100) что бы все эти числа были заменины в итоге например 110 impi Общие вопросы Javascript 4 08.10.2014 08:30