Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Округлить десятичную дробь до опр. знака после запятой. (Димчик)
Author Message
Димчик
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu Dec 23, 2004 9:45 pm ()
   Post subject: Округлить десятичную дробь до опр. знака после запятой.
Reply with quote

В JavaScript я новичок, так, что сильно не браните. Задача: необходимо вывести десятичную дробь с определённым количеством знаков после запятой. Как я понял конкретной функции, такой как в php
Code (php): скопировать код в буфер обмена
echo (www.php.net/echo) round (www.php.net/round)(1.95583, 2)// 1.96
 
в JavaScript нет. Поэтому сделал так:
Code (html): скопировать код в буфер обмена
<script (december.com/html/4/element/script.html) language="javascript"> (december.com/html/4/element/.html)
number = 1.95583;
number = number.toString().split('.');
number = number[0]+'.'+number[1].substr(0,3);
alert( number );
</script>
Насколько удачно такая реализация? Может я мыслю не в том направлении и сделать всё можно намного проще?

Заранее благодарен.
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Thu Dec 23, 2004 10:03 pm (спустя 18 минут; написано за 49 секунд)
   Post subject:
Reply with quote

Можно попробовать Math.round(number*100)/100.
Back to top
View user's profile Send private message Send e-mail
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Thu Dec 23, 2004 10:21 pm (спустя 17 минут; написано за 4 минуты 58 секунд)
   Post subject:
Reply with quote

Code (JavaScript): скопировать код в буфер обмена
string Number.toPrecision(число)
где число - числовое выражение от 1 до 21 задает точность числа.
метод возвражает строку, которая содержит
1. число в экспоненциальной форме вида цифра.nnnnEbbbb (количество цифр nnnn = число - 1)
2. число с фиксированной точкой вида xxxx.nnnn (количество цифр nnnn = число)

если число не задано вызов Number.toPrecision() равносильно вызову Number.toString()

метод работает в МСИЕ с версии 5.5 (кажется)
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Fri Dec 24, 2004 12:22 am (спустя 2 часа 1 минуту; написано за 1 секунду)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Можно попробовать Math.round(number*100)/100.
Не "можно", а -- нужно.
Только -- для лучшего понимания -- приведённый пример надо бы чуть-чуть расширить.
Например так, как тут: Number rounding in JavaScript (wsabstract.com/javatutors/round.shtml)
Code (JavaScript): скопировать код в буфер обмена
var original=28.453

1) //round "original" to two decimals
var result=Math.round(original*100)/100  //returns 28.45

2) // round "original" to 1 decimal
var result=Math.round(original*10)/10  //returns 28.5

3) //round 8.111111 to 3 decimals
var result=Math.round(8.111111*1000)/1000  //returns 8.111

In case you haven't picked up on it, the formula to round any number to x decimal points is:

1) Multiple the original number by 10^x (10 to the power of x)
2) Apply Math.round() to the result
3) Divide result by 10^x
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Fri Dec 24, 2004 5:26 am (спустя 5 часов 4 минуты; написано за 7 секунд)
   Post subject:
Reply with quote

Code (JavaScript): скопировать код в буфер обмена
if (!Number.propotype.toPrecision) {

    function Number.propotype.toPrecision = function(precision)
    {
        var result = this;
        if (precision > 0) {
            var exp10 = Math.pow(10, precision);
            result = Math.round(this * exp10) / exp10;
        }
        return result.toString();
    }

}


Last edited by Rumata on Wed Dec 29, 2004 12:29 pm; edited 1 time in total
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Wed Dec 29, 2004 11:45 am (спустя 5 дней 6 часов 18 минут; написано за 52 секунды)
   Post subject:
Reply with quote

Rumata wrote:
if (!Number.propotype.toPrescision) {
s - лишнее
Back to top
View user's profile Send private message
Rumata
Профессионал



Joined: 17 Aug 2003
Posts: 1850
Карма: 185
   поощрить/наказать


PostPosted: Wed Dec 29, 2004 12:30 pm (спустя 44 минуты; написано за 10 секунд)
   Post subject:
Reply with quote

Maus:
исправил
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML