: bir alt kabuk yaratmış kaçınan şöyle
Alternatif olarak, bu da bc için girdi olarak burada belgeyi yönlendirerek bir boru olmadan çalışır sayıyı, onu kırpıyorsun. Bu ölçeğin muhtemelen istediği gibi davranmayacağını, belki de kimsenin davranmasını istemediği bir şekilde söyleyeceğim.
> x="5+50*3/20 + (19*2)/7"
> echo "$x" | bc -l
17.92857142857142857142
> echo "scale = 3; $x" | bc -l
17.928
Ayrıca, because of the behaviour of scale, eklemeleri ayrı her çarpma/bölme yuvarlama.Bana biraz örneklerle benim açımdan kanıtlamak edelim:
> echo "scale=0; 5/2" | bc -l
2
> echo "scale=0; 5/2 + 7/2" | bc -l
5
> echo "5/2 + 7/2" | bc -l
6.00000000000000000000
herhangi bir işlem yapılmazsa ölçek da çalışmıyor Ancak. Çirkin bir çalışma var:
> echo "scale=0; 5.5" | bc -l
5.5
> echo "scale=0; 5.5/1" | bc -l
5
Çekme işleri bundan kaynaklanıyor.
BC ölçeğini kullanmak istiyorsanız
, sadece nihai sonuç zaten bilgisayarlı ve o zaman bile, dikkat için yap.
Yuvarlamanın, istediğiniz hassaslığın bir sayısının + yarısını kırpmakla aynı olduğunu unutmayın.
sen yuvarlanır gereken bir numaraya .5 eklerseniz bize en yakın tam sayıya yuvarlama örneğini ele alalım, onun tamsayı kısmı bir sonraki tamsayı değeri alacak ve kestirme istenilen sonucu verecektir. Bu sayı yuvarlanmalıysa, .5 eklenmesi, tamsayı değerini değiştirmez ve kesme, hiçbir şey eklendiğinde olduğu gibi aynı sonucu verir.
Böylece benim çözüm aşağıdaki gibidir:
Yine
> y=$(echo "$x" | bc -l)
> echo "scale=3; ($y+0.0005)/1" | bc -l # scale doesn't apply to the +, so we get the expected result
17.929
, gerçekten ihtiyaç vardır böylece iki operasyonda da kesiliyor, (yukarıda açıklandığı gibi) aşağıdaki çalışmıyor unutmayın:
> echo "scale=3; ($x+0.0005)/1" | bc -l
17.928
Sizin soru oldukça belirsizdir. "Örnek çıktı" olarak ne diyorsunuz? "Çıktım" olarak ne diyorsunuz? Ne diyorsunuz "makine olmasını ister"? Aslında, komut dosyanızın oluşturmasını istediğiniz çıktı nedir: kesik veya yuvarlak mı? –
örnek giriş, komut dosyasının doğru olup olmadığını kontrol etmek için makinenin ürettiği girdidir; bu, çıktının örnek çıktı olan çıktı olmasını bekler. ve çıkışım benim betiğimin ürettiği çıktı, ihtiyacım olan şey benim çıktıya benzeyecek çıkışımdır. @YvesDaoust – krrish
Belki de açıklamanın daha az belirsiz olduğunu söylemenin yanlış olabileceğinden emin değilim. Kesilmiş veya yuvarlak mı? –