Как уже упоминалось, вы должны потреблять stderr и stdout .
По сравнению с другими ответами, поскольку Java 1.7 еще проще , Вам больше не нужно создавать темы, чтобы читать stderr и stdout .
Просто используйте ProcessBuilder
и используйте методы redirectOutput
в комбинации с redirectError
или redirectErrorStream
.
String directory = "/working/dir";
File out = new File(...); // File to write stdout to
File err = new File(...); // File to write stderr to
ProcessBuilder builder = new ProcessBuilder();
builder.directory(new File(directory));
builder.command(command);
builder.redirectOutput(out); // Redirect stdout to file
if(out == err) {
builder.redirectErrorStream(true); // Combine stderr into stdout
} else {
builder.redirectError(err); // Redirect stderr to file
}
Process process = builder.start();
Вы должны убрать все запятые из строки до того, как попытаетесь разобрать его, так как анализ числа с запятыми будет анализировать только до первой запятой.
//For example Result
parseFloat("5,4,3") // 5
parseFloat("15,000") // 15
parseFloat("123,456") // 123
Это можно сделать с помощью простой замены: .replace(/,/g,'');
Я также внес несколько изменений, чтобы привести в порядок:
replace
, и parseFloat
, называемые parseCurrency
, чтобы сделать ее легко пригодной для повторного использования formatCurrency
, чтобы сделать ее легко многократно используемой dec_balance
и nov_balance
входы могут совместно использовать событие, поскольку изменение любого из них должно привести к пересчету net
const formatCurrency = (str) => (""+str).replace(/[^\d.]/g, "").replace(/^(\d*\.)(.*)\.(.*)$/, '$1$2$3').replace(/\.(\d{2})\d+/, '.$1').replace(/\B(?=(\d{3})+(?!\d))/g, ",");
const parseCurrency = (str) => str.replace(/,/g,'');
$('input.inputdecimals').keyup(function(event) {
if (event.which >= 37 && event.which <= 40) return;
$(this).val((i,v) => formatCurrency(v));
});
$("#txt_balance_dec, #txt_balance_nov").keyup(function() {
var bal_dec = parseCurrency( $("#txt_balance_dec").val() );
var bal_nov = parseCurrency( $("#txt_balance_nov").val() );
var result = bal_dec - bal_nov;
$('#txt_nett_dec').val(formatCurrency(result));
});
input { display: block; margin: 10px 0;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Dec <input type="text" class="inputdecimals" id="txt_balance_dec" name="txt_balance_dec" value="0.00">
Nov <input type="text" class="inputdecimals" id="txt_balance_nov" name="txt_balance_nov" value="0.00">
Net <input type="text" class="inputdecimals" id="txt_nett_dec" name="txt_nett_dec" value="0.00" readonly>
[1128] ( Стоит также отметить, что ваша функция форматирования выглядит раздетой -
, поэтому net
будет абсолютным значением. ) [ 1126]