2009-02-13 3 views
1

Я пишу небольшую веб-страницу, которая позволит учащимся отвечать на вопросы и получать отзывы о своих ответах.Номер плавающей точки в JS

Часть этого обнаружения проверяет общие ошибки, чтобы дать им указания. В частности, я хочу проверить, является ли их ответ силой десяти из фактического ответа.

Если ответ был 3.93E-6, это условие должно сработать, если они типа 3.93E2, 3.93E-9, 3,93 и т.д.

Очевидный способ для меня, чтобы проверить это, чтобы сделать что-то вроде этого:

var correct = 3.93E-6; 
var entry = 3.93E-2; //really comes from an input box. 

if (!(entry/correct)%10) { 
    alert ("power of ten error"); 
} 

Однако это не работает как ошибка/исправление не работает для больших/малых чисел.

Как это исправить?

Живой код по адресу: http://bradshawenterprises.com/test.html

+0

В конце концов, я сделал немного как: correct.toExponential(). ToString(). Split ('e'); Я преобразовал каждое число в exp, затем в строку и разделил его, а затем сравнил первый элемент результирующего массива. Спасибо! –

ответ

2
var num = 12.4123; 
var numString = num.toExponential() 
// numString = "1.24123e+1" 

Это нормализующий номер, но вы должны разобрать его вручную. (Как и о том, как точный результат должен быть ...)

1

Если они необходимы, чтобы ввести ответ с пометкой «E», почему бы не просто проверить, если все вещи до «Е» то же самое в ответ на оба студента , и правильный ответ.

Конечно, вы также можете дать им представление о том, сколько знаков после запятой, они должны держать, иначе 1.2E5 и 1.21E7 не вызовет «власть из десяти ошибок»

+0

Часть теста состоит в том, чтобы правильно определить десятичные знаки - есть другое условие, которое вызывает это. –

2

Вот один из способов, чтобы увидеть, если два числа от приблизительно степень десять:

var correct = 3.93E-6; 
var entry = 3.93E-2; 
var epsilon = .01; 

var log10_ratio = Math.log(correct/entry)/Math.log(10); 
if (Math.abs(Math.round(log10_ratio) - log10_ratio) < epsilon) { 
    alert ("power of ten error"); 
} 
+0

Вы не имели в виду '> =' epsilon? – Christoph

+0

@ Кристоф: Нет, цель состоит в том, чтобы проинформировать учащегося, если их запись о власти 10 от правильного ответа. Если это не так, это не «сила десяти ошибок», – Miles