У меня есть переменная, указанная как% 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, как я могу заставить весь номер работать?
Запятая разделяет ваше число на два отдельных значения, которые передаются как отдельные аргументы document.write
. Решение заключается в удалении запятой. Лучшим решением было бы изменить его на стороне сервера.
Если вам абсолютно необходимо, вы можете изменить свой код, чтобы JavaScript удалил его.
document.write("%SUBTOTAL%".replace(/[^0-9.]/g,'') * 2);
/[^0-9.]/g
будет соответствовать всем символам, которые не являются 0-9 или периодом. Замените их пустой строкой, чтобы удалить их. Умножение на два приведет строку к числу и умножьте.
Проблема здесь в том, что запятая в количестве не является тысячным seperator, это оператор.
Что видит браузер
(expresion 1), (expression 2)
Вы не можете выплюнуть такой номер и заставить его работать. Вам нужно будет удалить запятую для выполнения операции.
И игра с кодом выглядит так, как будто некоторые браузеры позволяют вам передавать несколько аргументов в document.write, и он выписывает их
document.write("A","B","C","D");
приводит к выписыванию ABCD, поэтому вы видите результаты.
Что-то вроде этого будет работать
document.write(parseFloat("%SUBTOTAL%".replace(/,/g,"")*2));
и если вы хотите, чтобы запятая была вставлена снова, вам нужно будет добавить код для ее вставки.
"551313.46"
... или, возможно, я неправильно понял эту часть.
document.write
может принимать несколько аргументов в виде списка через запятую и записывать их.
Попробуйте сделать что-то вроде document.write(parseFloat (% SUBTOTAL%) * 2)
parseFloat
решает проблему?
Это не проблема в javascript, это проблема на любом серверном языке, который вы используете. Вы должны убедиться, что %SUBTOTAL%
отформатировано как число, а не строка.
Вот что передается в интерфейсный код: 551,313.46
Когда вы умножаетесь на два, вот что он показывает: 551,313.46*2
Вы должны использовать функцию ParseFloat
или аналогичную в коде SERVER SIDE, надеюсь, тот, который учитывает запятые. Поскольку это строка на стороне сервера, вы можете просто удалить запятую с помощью функции замены строки, a-la SUBTOTAL.replace(',','')
, но пока вы не покажете свой серверный код, на самом деле нет способа эффективно ответить на вопрос.
Если вы настроены на это на стороне клиента, не предоставляя нам свой серверный источник и заставляя нас угадывать вашу проблему; здесь очень плохой взлом, чтобы обойти проблему, которую вы видите:
Попробуйте обернуть %SUBTOTAL%
кавычками: document.write(ParseFloat("%SUBTOTAL%")*2)
document.write(551, 313.46);
вызов функции с двумя аргументами.
551,313.46
, оно показывает551313.46
(то есть без запятой). Если сгенерированный код былdocument.write("551,313.46");
, он должен показать запятую. Если это былdocument.write(551,313.46);
, он должен показывать только313.56
.%SUBTOTAL%
, как оно определено и что его анализирует для создания числового значения?