Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   ява-скрипт округление чисел после запятой (https://javascript.ru/forum/dom-window/54839-yava-skript-okruglenie-chisel-posle-zapyatojj.html)

_Eldar_ 02.04.2015 20:36

ява-скрипт округление чисел после запятой
 
1.36363636364<br><table><tr><td>Число</td><td>129.36363636364</td><td>3.3643534564</td><td >56.818181818182</td></tr></table>
помогите с ява-скриптом - чтобы длинные числа на странице после точки округлял до тысячных (убирал-удалял-скрывал числа идущие после третьей цифры после точки)

ruslan_mart 02.04.2015 20:44

document.body.innerHTML = document.body.innerHTML.replace(/(\d+\.\d{3})\d+/gm, '$1');

_Eldar_ 02.04.2015 20:50

спасибо

Aetae 02.04.2015 22:10

Только если на странице есть любые другие скрипты - вышеприведённый всё сломает.)
Ruslan_xDD, не стыдно тебе такой ужас писать?)

рони 02.04.2015 22:29

_Eldar_,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
     $(function(){
   $('td').text(function(i, str) {
   return +str ? (+str).toFixed(3):str;
})
});
  </script>
</head>

<body>
<table><tr><td>Число</td><td>129.36363636364</td><td>3.3643534564</td><td >56.818181818182</td></tr></table>


</body>

</html>

_Eldar_ 02.04.2015 22:40

уважаемый рони - а если еще цифры вне table - тогда как?

soltx 02.04.2015 22:52

как вариант указать новый селектор $('td') <----- # . elements ... (jQuery)

рони 02.04.2015 22:55

_Eldar_,
добавить те элементы в которых есть цифры -- вариант конечно для цифр без текста - но что вы дали то получили

рони 02.04.2015 23:05

_Eldar_,
найдёт всех и пристрелит округлит
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
    $(function() {
    $("*").contents().filter(function() {
        return 3 == this.nodeType
    }).each(function() {
        var a = this.data;
        this.data =  a.replace(/\d+\.\d+/g, function(a) {
            return (+a).toFixed(3)
        })
    })
});
  </script>
</head>

<body>
<table  id="msgFlash"><tr><td>Число</td><td>129.36363636364</td><td>3.3643534564</td><td >56.818181818182</td></tr></table>
всякая фигня 123.456789

</body>

</html>

ruslan_mart 03.04.2015 07:56

Aetae, не-а, на всей странице же. Если бы автор привёл нормальный пример, где показывается в каких именно тэгах нужно применить данную операцию, то пожалуйста. А так по всем тэгам на странице пробегаться тоже рукожопие. :)

_Eldar_ 03.04.2015 08:48

Цитата:

Сообщение от Ruslan_xDD
Aetae, не-а, на всей странице же. Если бы автор привёл нормальный пример

автор привел нормальный пример 1.36363636364<br><table>..., как быть с такими двумя числами? результат обработки первого числа ведь будет 0 ну или лучше ближайшая цифра -0.000005, и второе число совсем не длинное - но все равно обрабатывается.
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
    $(function() {
    $("*").contents().filter(function() {
        return 3 == this.nodeType
    }).each(function() {
        var a = this.data;
        this.data =  a.replace(/\d+\.\d{4,12}/g, function(a) {
            return (+a).toFixed(3)
        })
    })
});
  </script>
</head>
<body>
-0.000005155102<br>5.5<br><table><tr><td>Число</td><td>56.039026226151</td><td>3.364353456415</td><td >56.818181818182</td></tr></table>
</body>
</html>

рони 03.04.2015 09:02

_Eldar_,
а сам что-нибудь? вот вам дока http://javascript.ru/RegExp ваша задача сделать так чтоб 5.5 скрипт даже не пытался преобразовать, взамен получите ноль )))

_Eldar_ 03.04.2015 09:09

Цитата:

Сообщение от рони (Сообщение 364760)
_Eldar_,
а сам что-нибудь? вот вам дока http://javascript.ru/RegExp ваша задача сделать так чтоб 5.5 скрипт даже не пытался преобразовать, взамен получите ноль )))

вроде сделал, а можно взамен -0.000005 ?

рони 03.04.2015 09:12

_Eldar_, малоли думать не захочется, внизу общее решение, но в нём нет того решения что требуется от вас в 12 посте, оно за вами.
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
    $(function() {
    $("*").contents().filter(function() {
        return 3 == this.nodeType
    }).each(function() {
        var a = this.data;
        this.data =  a.replace(/-?\d+\.\d+/g, function(a) {
            return +(+a).toFixed(3)
        })
    })
});
  </script>
</head>
<body>  <table  id="msgFlash"><tr><td>Число</td><td>129.36363636364</td><td>3.3643534564</td><td >56.818181818182</td></tr></table>
всякая фигня -123.456789


-0.00000515<br>5.5
</body>
</html>

рони 03.04.2015 09:31

Цитата:

Сообщение от _Eldar_
можно взамен -0.000005

можно - покажите ваше решение

_Eldar_ 03.04.2015 09:54

Цитата:

Сообщение от рони
можно - покажите ваше решение

отредактировал выше

рони 03.04.2015 10:50

Цитата:

Сообщение от _Eldar_
отредактировал выше

ok! :)
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
    $(function() {
    $("*").contents().filter(function() {
        return 3 == this.nodeType
    }).each(function() {
        var a = this.data;
        this.data =  a.replace(/-?\d+\.\d+/g, function(a) {
            var len = a.match(/\.0+/);
            len = len && len[0].length > 3 ? len[0].length : 3;
            return +(+a).toFixed(len)
        })
    })
});
  </script>
</head>
<body>  <table  id="msgFlash"><tr><td>Число</td><td>129.36363636364</td><td>3.3643534564</td><td >56.818181818182</td></tr></table>
всякая фигня -123.456789
   0.00589

-0.000005155102<br>5.5
</body>
</html>


Часовой пояс GMT +3, время: 20:59.