| … | |
… | |
| 1063 | ######################################################################### |
1063 | ######################################################################### |
| 1064 | |
1064 | |
| 1065 | #construct the answer evaluator |
1065 | #construct the answer evaluator |
| 1066 | my $answer_evaluator = new AnswerEvaluator; |
1066 | my $answer_evaluator = new AnswerEvaluator; |
| 1067 | $answer_evaluator->{debug} = $num_params{debug}; |
1067 | $answer_evaluator->{debug} = $num_params{debug}; |
| 1068 | $answer_evaluator->ans_hash( correct_ans => $correct_num_answer, |
1068 | $answer_evaluator->ans_hash( |
|
|
1069 | correct_ans => $correctVal, |
| 1069 | type => "${mode}_number", |
1070 | type => "${mode}_number", |
| 1070 | tolerance => $num_params{tolerance}, |
1071 | tolerance => $num_params{tolerance}, |
| 1071 | tolType => $num_params{tolType}, |
1072 | tolType => $num_params{tolType}, |
| 1072 | units => $correct_units, |
1073 | units => $correct_units, |
| 1073 | original_correct_ans => $formattedCorrectAnswer, |
1074 | original_correct_ans => $formattedCorrectAnswer, |
| 1074 | rh_correct_units => \%correct_units, |
1075 | rh_correct_units => \%correct_units, |
| 1075 | answerIsString => $corrAnswerIsString, |
1076 | answerIsString => $corrAnswerIsString, |
| 1076 | ); |
1077 | ); |
| 1077 | my ($in, $formattedSubmittedAnswer); |
1078 | my ($in, $formattedSubmittedAnswer); |
| 1078 | $answer_evaluator->install_pre_filter(sub {my $rh_ans = shift; |
1079 | $answer_evaluator->install_pre_filter(sub {my $rh_ans = shift; |
| 1079 | $rh_ans->{original_student_ans} = $rh_ans->{student_ans}; $rh_ans;} |
1080 | $rh_ans->{original_student_ans} = $rh_ans->{student_ans}; $rh_ans;} |
| 1080 | ); |
1081 | ); |
| … | |
… | |
| 2590 | |
2591 | |
| 2591 | if( $format =~ s/#\s*$// ) { # remove trailing zeros in the decimal |
2592 | if( $format =~ s/#\s*$// ) { # remove trailing zeros in the decimal |
| 2592 | $out = sprintf( $format, $number ); |
2593 | $out = sprintf( $format, $number ); |
| 2593 | $out =~ s/(\.\d*?)0+$/$1/; |
2594 | $out =~ s/(\.\d*?)0+$/$1/; |
| 2594 | $out =~ s/\.$//; # in case all decimal digits were zero, remove the decimal |
2595 | $out =~ s/\.$//; # in case all decimal digits were zero, remove the decimal |
|
|
2596 | $out =~ s/e/E/g; # only use capital E's for exponents. Little e is for 2.71828... |
|
|
2597 | } elsif (is_a_number($number) ){ |
|
|
2598 | $out = sprintf( $format, $number ); |
|
|
2599 | $out =~ s/e/E/g; # only use capital E's for exponents. Little e is for 2.71828... |
|
|
2600 | } else { # number is probably a string representing an arithmetic expression |
|
|
2601 | $out = $number; |
| 2595 | } |
2602 | } |
| 2596 | else { |
|
|
| 2597 | $out = sprintf( $format, $number ); |
|
|
| 2598 | } |
2603 | |
| 2599 | $out =~ s/e/E/g; # only use capital E's for exponents. Little e is for 2.71828... |
|
|
| 2600 | } |
|
|
| 2601 | else { |
2604 | } else { |
| 2602 | $out = $number; |
2605 | $out = $number; |
| 2603 | $out =~ s/e/E/g; # only use capital E's for exponents. Little e is for 2.71828... |
2606 | $out =~ s/e/E/g; # only use capital E's for exponents. Little e is for 2.71828... |
| 2604 | |
2607 | |
| 2605 | } |
2608 | } |
| 2606 | return $out; |
2609 | return $out; |