[bc] nul voor de komma

Pagina: 1
Acties:

  • Palomar
  • Registratie: Februari 2000
  • Niet online
Ik voer een berekening uit dmv het commando:

code:
1
(echo scale=3; echo $UNIEK/$TOTAAL) | bc


Ik krijg nu alleen een antwoord als .452 en ik wil 0.452 hebben. Een nul ervoor dus. Ik kan nergens vinden hoe je dit voor elkaar krijgt (of ik zoek niet goed ;)). Iemand een idee hoe dit moet?

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10-2025
ik ken BC absoluut niet, maar meestal doe je zoiets door te kijken of het getal kleiner is dan 1

en dan 0+getal te doen (als string dus)

This message was sent on 100% recyclable electrons.


Verwijderd

Als BC hier niet zelf een optie voor heeft, kun je idd, zoals BasieP eigenlijk ook al zegt:

code:
1
echo 0$((echo scale=3; echo $UNIEK/$TOTAAL) | bc)


voor gebruiken, maar dat moet tog ook netter kunnen :)

Verwijderd

Van http://www.opengroup.org/...9695399/utilities/bc.html:
For all values of obase specified by this volume of IEEE Std 1003.1-2001, bc shall output numeric values by performing each of the following steps in order:

[...]

2. One of the following is output, depending on the numerical value:

2a) If the absolute value of the numerical value is greater than or equal to one, the integer portion of the value shall be output as a series of digits appropriate to obase (as described below), most significant digit first. The most significant non-zero digit shall be output next, followed by each successively less significant digit.

2b) If the absolute value of the numerical value is less than one but greater than zero and the scale of the numerical value is greater than zero, it is unspecified whether the character 0 is output.

2c) If the numerical value is zero, the character 0 shall be output.
Kortom, je kunt het niet forceren, het kan gebeuren met sommige bc implementaties, met anderen kan het ook niet gebeuren. Een idee is om b.v. zoiets te doen: 'echo 'scale=3;1/3' | bc | sed 's#^\.#0.#''. Dan zet je er alleen een 0 voor als het niet gebeurt, en niet als het wel gebeurt. Sterker nog, het zet er alleen een 0 voor als de uitvoer met een '.' begint, dus ook 3/1 blijft ongemoeid.

[ Voor 6% gewijzigd door Verwijderd op 12-12-2005 19:29 ]


  • Palomar
  • Registratie: Februari 2000
  • Niet online
ok, thanks voor de replies :) Ik probeer nu iets met if-else te doen om een check te maken, maar dat valt nog niet mee. Itt normale programmeertalen waarbij if-else uber-simpel is krijg ik met bash alleen maar vreemde errors. Zelfs een simpel scriptje als dit (check of de variabele is meegegeven)

code:
1
2
3
4
if [$1 = ]; then
    echo "geen bestanden opgegeven"
    exit 0
fi

(heb ik uit een manual gehaald, dus zou moeten werken??) geeft een foutmelding. Als ik het uitvoer zonder paramaters dan gaat het goed, maar doe ik script test dan krijg ik de error:

code:
1
 line 1: [test: command not found

WTF?

Wat doe ik fout? Ik heb al heel wat uurtjes hiermee zitten kloten en het is imo volstrekt onlogisch dat 'bash'...

[ Voor 20% gewijzigd door Palomar op 13-12-2005 21:09 ]


  • zomertje
  • Registratie: Januari 2000
  • Laatst online: 03-02 16:28

zomertje

Barisax knorretje

Een spatie na '[' en voor $1
En volgens mij moet je beginnen met $0 :)

het ultieme jaargetijde.... | #!/usr/bin/girl | Art prints and fun


  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 30-01 01:49

Sprite_tm

Semi-Chinees

Nope, $0 is de naam van het huidige shellscript :)

code:
1
2
3
4
if [ "$1" = "" ]; then
   echo "geen bestanden opgegeven"
   exit 0
fi

doet waarschijnlijk wat je wilt. Let op de spaties voor en na de [ en ], en het quoten van je argumenten.

Bash is inderdaad vreemd, maar als je bedenkt dat bijvoorbeeld [ stiekem ook een commando is, wel begrijpelijk.

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • newpegasus
  • Registratie: Juni 2003
  • Laatst online: 13-03-2022

newpegasus

Hertog

Voor alle duidelijkheid: if [ $1 == 0 ] staat gelijk aan if test $1 == 0

[ ] is dus de verkorte schrijfwijze van het commando test. Let bij de verkorte schrijfwijze dus goed op spaties want dat zijn echt lullige foutjes...

GuitarFacts | Last.fm | Google Zoekmachine Optimalisatie

Pagina: 1