Javascript запись и ошибка округления

0

У меня есть переменная, указанная как% SUBTOTAL% в HTML-документе, если я просто поместил% SUBTOTAL%, ее заменил число, в данном случае "551,313.46". Если я напишу это:

<script type="text/javascript">document.write(%SUBTOTAL%);</script>

он заменяется на "551313.46"
Я хочу делать основные математические операции с этим числом, но я пытаюсь умножить его на 2

<script type="text/javascript">document.write(%SUBTOTAL%*2);</script>

Я просто получил это "551626.92", так что только цифры после комы многообразны на 2, как я могу заставить весь номер работать?

  • 2
    Не могли бы вы опубликовать сгенерированный HTML, где значение уже заменено? Мне особенно интересно, почему, если значение равно 551,313.46 , оно показывает 551313.46 (то есть без запятой). Если сгенерированный код был document.write("551,313.46"); , он должен показать запятую. Если это был document.write(551,313.46); , он должен показывать только 313.56 .
  • 1
    Что такое %SUBTOTAL% , как оно определено и что его анализирует для создания числового значения?
Показать ещё 6 комментариев
Теги:

4 ответа

1
Лучший ответ

Запятая разделяет ваше число на два отдельных значения, которые передаются как отдельные аргументы document.write. Решение заключается в удалении запятой. Лучшим решением было бы изменить его на стороне сервера.

Если вам абсолютно необходимо, вы можете изменить свой код, чтобы JavaScript удалил его.

document.write("%SUBTOTAL%".replace(/[^0-9.]/g,'') * 2);

/[^0-9.]/g будет соответствовать всем символам, которые не являются 0-9 или периодом. Замените их пустой строкой, чтобы удалить их. Умножение на два приведет строку к числу и умножьте.

  • 0
    спасибо, это сработало !!! задача решена
3

Проблема здесь в том, что запятая в количестве не является тысячным seperator, это оператор.

Что видит браузер

(expresion 1), (expression 2)

Вы не можете выплюнуть такой номер и заставить его работать. Вам нужно будет удалить запятую для выполнения операции.

И игра с кодом выглядит так, как будто некоторые браузеры позволяют вам передавать несколько аргументов в document.write, и он выписывает их

document.write("A","B","C","D");

приводит к выписыванию ABCD, поэтому вы видите результаты.

Что-то вроде этого будет работать

document.write(parseFloat("%SUBTOTAL%".replace(/,/g,"")*2));

и если вы хотите, чтобы запятая была вставлена снова, вам нужно будет добавить код для ее вставки.

  • 0
    Это то, что я подумал, но это не объясняет вывод "551313.46" ... или, возможно, я неправильно понял эту часть.
  • 2
    Похоже, document.write может принимать несколько аргументов в виде списка через запятую и записывать их.
Показать ещё 6 комментариев
0

Попробуйте сделать что-то вроде document.write(parseFloat (% SUBTOTAL%) * 2)

  • 0
    Как вы думаете, parseFloat решает проблему?
  • 0
    Я попытался синтаксический анализ, и он все еще не удается, он просто печатает 551 и анализирует, а затем умножает отпечатки 1102
0

Это не проблема в javascript, это проблема на любом серверном языке, который вы используете. Вы должны убедиться, что %SUBTOTAL% отформатировано как число, а не строка.

Вот что передается в интерфейсный код: 551,313.46

Когда вы умножаетесь на два, вот что он показывает: 551,313.46*2

Вы должны использовать функцию ParseFloat или аналогичную в коде SERVER SIDE, надеюсь, тот, который учитывает запятые. Поскольку это строка на стороне сервера, вы можете просто удалить запятую с помощью функции замены строки, a-la SUBTOTAL.replace(',',''), но пока вы не покажете свой серверный код, на самом деле нет способа эффективно ответить на вопрос.

Если вы настроены на это на стороне клиента, не предоставляя нам свой серверный источник и заставляя нас угадывать вашу проблему; здесь очень плохой взлом, чтобы обойти проблему, которую вы видите:

Попробуйте обернуть %SUBTOTAL% кавычками: document.write(ParseFloat("%SUBTOTAL%")*2)

  • 0
    Почему это было отвергнуто? Вы явно не прочитали или не поняли мой ответ.
  • 0
    "Прямо сейчас это интерпретируется как строка" Нет, это не так. Похоже, сгенерированный код - document.write(551, 313.46); вызов функции с двумя аргументами.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню