Деление с плавающей точкой в пакетном файле

Причина, по которой люди рекомендуют избегать перечислений в веб-сервисах, заключается в том, что они создают тонкие, обратно совместимые проблемы.

То же самое относится к обычным перечислениям, но в веб-сервисах проблема еще более ясна, особенно в сгенерированных .NET прокси (см. Ниже).

  • Если перечисление вводится только у вас нет проблем.
  • Если перечисление может быть параметром out, тогда, если вы добавите новый элемент и вернете его, у старых клиентов могут возникнуть проблемы:
    • Если клиент использует прокси-сервер, сгенерированный .NET, он сломается раньше вызывающий может справиться с этим (при десериализации)
    • Даже если сгенерированный код для прокси-сервера поддерживает изменение (например, если он отображает перечисление в строку), пользовательский код в клиенте может не обрабатывать новое неожиданное значение (это может быть просто никогда не выполненный путь)

Определяя параметр как строку, вы сигнализируете пользователю вашего API, что значение может измениться в будущем , Даже если вы думаете, что ценность никогда не изменится, это хорошая практика, чтобы быть готовым.

На эту тему есть хороший пост Даре Обасанджо.

13
задан phuclv 25 February 2018 в 15:01
поделиться

2 ответа

Batch files as such do not support the floating point arithmetic. However, this article suggests a workaround that uses an external script file to do calculations. The script file should use some sort of eval function to evaluate the expression passed as an argument and return the result. Here's a sample VBScript file (eval.vbs) that does this:

WScript.Echo Eval(WScript.Arguments(0))

You can call this external script from your batch file, specify the expression to be evaluated and get the result back. For example:

@echo off
for /f %%n in ('cscript //nologo eval.vbs "10/3"') do (
  set res=%%n
)
echo %res%

Of course, you'll get the result as a string, but it's better than nothing anyway, and you can pass the obtained result to the eval script as part of another expression.

6
ответ дан 1 December 2019 в 22:23
поделиться

Согласно этой ссылке , в языке пакетной обработки DOS нет типа с плавающей запятой:

Хотя переменные существуют в языке пакетного программирования DOS, они чрезвычайно ограничены . Не существует целочисленных, указателей или переменных с плавающей запятой, только строки.

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

3
ответ дан 1 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: