Для bc с ключом "-l" надо задать ещё scale, это удобно сделать в ~/.bcrc
text
/* this is a options file for bc (man 1 bc)
this file executed via BC_ENV_ARGS=~/.bcrc environment variable */
scale=10
а где-то надо установить эту BC_ENV_ARGS в $HOME/.bcrc:
в .bahsrc, .tcshrc или в скрипте, выполняющемся при входе в систему,
через какой-нибудь ~/.config/autostart/*.desktop.
только то что написано: использование bc в скриптах без осмотрительности даёт большое количество ошибок...
питон от дурости не помогает. Всегда ваш, К.О.
"Fat-Zer" написал:
как и везде, в том, что два последних разряда не правильные...
а почему два последних разряда должны быть "правильными"? Это не баг, а фича. Причём не только bc, а _любого_ калькулятора. В т.ч. и питоньего.
"Fat-Zer" написал:
дык, в этом и идея, что если FP нужны, то на bash'е лучше не писать...
дык в bash'е и нет никаких FP, есть калькулятор: bc.
"Fat-Zer" написал:
ничего не понял...
тогда вам просто надо запомнить правило: нельзя сравнивать на равенство два FP числа. И "последние разряды" тоже не надо, не заглядывайте коту под хвост.
"Fat-Zer" написал:
при выводе дробные числа как-то принято округлять...
ну вот и округляйте. ПРИ ВЫВОДЕ.
"moshell" написал:
простая задача сводится на нет. тупо умножить "плавающую" цифру на не плавающую неужели это сложно в bash. (ответ - в bash ДА!)
в bash это тупо невозможно. Там просто нет таких чисел. Только самому костылять кривой и медленный велосипед. Но есть bc.
"moshell" написал:
то есть не надо погружаться в иной мир
надо. Bc это не просто калькулятор, а программируемый калькулятор. Впрочем, 2*2 он тоже умеет.
"moshell" написал:
мне нужно чтобы был вывод результата в std, чтоб его можно было использовать и загонять в переменную
что-бы был вывод в std, нужно что-бы был ввод в std. Очевидно жеж!
"Fat-Zer" написал:
тот же bc, но с большой осторожностью или любой скриптовый язык (перлопитонорубилисп).
When performing some - usually division-related - calculations in bc, especially with the scale variable set high, the answer returned to the console (or stored in a variable) has many trailing zeroes at the end. e.g. the code scale=20;7/4 will cause 1.75000000000000000000 to be printed as the result.
Often this is cumbersome and makes 'obvious' numbers harder to read. The solution is the following function:
With this function you can say things like scale=20;q=7/4;q=trunc(q);q or simply scale=20;trunc(7/4), both of which will print 1.75 as expected.
An improved version of this, which can also deal with trailing 9's (in decimal) can be found in output_formatting.bc, and this also contains many other output formatting functions, including two similar to C's printf().
тогда вам просто надо запомнить правило: нельзя сравнивать на равенство два FP числа. И "последние разряды" тоже не надо, не заглядывайте коту под хвост.
казалось бы, при чём тут это....
"drBatty" написал:
А вот код того, без чего вы так безмерно страдаете:
для того что бы пару раз использовать bc в скрипте больно толсто...
"drBatty" написал:
дык в bash'е и нет никаких FP, есть калькулятор: bc.
дык, в этом и идея, что если FP нужны, то на bash'е лучше не писать...