Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.03.2009, 22:41
Новичок на форуме
Отправить личное сообщение для Sharp Посмотреть профиль Найти все сообщения от Sharp
 
Регистрация: 29.03.2009
Сообщений: 7

Результат вычислений в экспоненциальной форме
Здравствуйте, товарищи!
Сегодня решил начать изучение JavaScript. Купил книжку, весь день увлеченно ее читал, и решил (ясное дело) написать чего-нибудь.

Остановился на экспоненциальной форме записи чисел. Судя по всему, результаты вычислений над большими числами записываются именно в такой форме. То есть вместо того, чтобы представить результат как 0.00000000000007, JS делает так: 7e-14. Так вот, решил я написать функцию, переводящую такой результат в "нормальный". Получилось следующее:
<html> 
<head> 
<script> 
function NoExp(str_number) { 
var IsExp = 0; 
var chrLen = 0; 
var dotPosition = 0; 
var i = 0; 
IsExp = str_number.lastIndexOf("-"); 
if (IsExp > 0) { 
chrLen = str_number.substr(IsExp + 1, str_number.length - IsExp - 1); 
str_number = str_number.substring(0, IsExp - 1); 
dotPosition = str_number.indexOf("."); 
str_number = str_number.replace(".", ""); 
while (i < chrLen - dotPosition) { 
str_number = "0" + str_number; 
i++; 
} 
str_number = "0," + str_number; 
alert(str_number); 
} 
IsExp = str_number.lastIndexOf("+"); 
if (IsExp > 0) { 
chrLen = str_number.substr(IsExp + 1, str_number.length - IsExp - 1); 
str_number = str_number.substring(0, IsExp - 1); 
dotPosition = str_number.length - str_number.indexOf(".") - 1; 
alert(dotPosition); 
str_number = str_number.replace(".", ""); 
while (i < chrLen - dotPosition) { 
str_number = str_number + "0"; 
i++; 
} 
str_number = str_number; 
alert(str_number); 
} 
} 
</script> 
</head> 
<input type="button" onclick="NoExp('33.2424e-8')" value="OK"> 
</html>

(Ох, даже стыдно показывать этот бред.)
Оцените, пожалуйста. А еще лучше - расскажите про правильный алгоритм.

И еще вопрос. В каких случаях в конце строчки кода ставится точка с запятой? Не совсем понимаю.

Огромное спасибо за внимание!
Ответить с цитированием
  #2 (permalink)  
Старый 30.03.2009, 13:31
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

function NoExp(s){
    return s.toFixed(100).replace(/(.*0\.0*[1-9]*)0+\d*/g,'$1')
}

Последний раз редактировалось ZoNT, 30.03.2009 в 13:43.
Ответить с цитированием
  #3 (permalink)  
Старый 30.03.2009, 15:05
Профессор
Отправить личное сообщение для AzriMan Посмотреть профиль Найти все сообщения от AzriMan
 
Регистрация: 27.02.2009
Сообщений: 215

согласно стандарту ЕСМА, в конце строчки точка с запятой ";" может как ставиться, так и не ставиться.

p.s. 2 ZoNT - это пять!
Ответить с цитированием
  #4 (permalink)  
Старый 30.03.2009, 19:30
Новичок на форуме
Отправить личное сообщение для Sharp Посмотреть профиль Найти все сообщения от Sharp
 
Регистрация: 29.03.2009
Сообщений: 7

Спасибо всем.
Насколько мне стало известно, аргумент метода toFixed не может принимать значение, большее 20. И еще, toFixed не поддерживается в Netscape. Какие еще могут быть варианты преобразования экспоненциального числа?
Ответить с цитированием
  #5 (permalink)  
Старый 30.03.2009, 23:29
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Sharp
toFixed не поддерживается в Netscape
Где вы его откопали?
Ответить с цитированием
  #6 (permalink)  
Старый 30.03.2009, 23:56
Новичок на форуме
Отправить личное сообщение для Sharp Посмотреть профиль Найти все сообщения от Sharp
 
Регистрация: 29.03.2009
Сообщений: 7

Где-то читал...
Но там говорилось про n-версии Netscape (не помню точно, но что-то типа 4-6). Хотя у меня в седьмой версии все нормально работает (сейчас проверил).

Просьба. Объясните мне пожалуйста смысл вот этой строчки:
replace(/(.*0\.0*[1-9]*)0+\d*/g,'$1')
Ответить с цитированием
  #7 (permalink)  
Старый 31.03.2009, 00:01
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Sharp
Просьба. Объясните мне пожалуйста смысл вот этой строчки
Это настолько безграмотное регулярное выражение, что диву даешься, и думать для чего оно, разумеется нет никакого желания
Ответить с цитированием
  #8 (permalink)  
Старый 31.03.2009, 00:19
Новичок на форуме
Отправить личное сообщение для Sharp Посмотреть профиль Найти все сообщения от Sharp
 
Регистрация: 29.03.2009
Сообщений: 7

Ответить с цитированием
  #9 (permalink)  
Старый 31.03.2009, 11:00
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

когда нет желания думать - это диагноз...
Ответить с цитированием
  #10 (permalink)  
Старый 31.03.2009, 11:23
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от ZoNT
когда нет желания думать - это диагноз...
Это к чему?
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление полей к форме deliro Общие вопросы Javascript 7 22.03.2009 15:20
Обращение к форме октрытого окна SparkDSD Events/DOM/Window 3 27.02.2009 14:02