bc顯示小數點前的0

2021-10-01 03:22:45 字數 1444 閱讀 1940

bc是強大而常用的計算工具。不過在除法運算時,如果得到的結果值小於1,得到的小數前面的0不存。本篇提供幾個常用小數點前缺0的解決方法。

[root@361way ~]# bc

bc 1.06.95

this is free software with absolutely no warranty.

for details type `warranty'.

scale=2; 1/3

.33開啟bc進入互動模式,我們鍵入scale=2; 1/3 回車,看到結果0.33前的0沒有---注意此處保留小數點人2位 scale=2不能少,少了結果為是0 。

解決方法如下:

#!/bin/bash

#方法1

res1=$(printf "%.2f" `echo "scale=2;1/3"|bc`)

res2=$(printf "%.2f" `echo "scale=2;5/3"|bc`)

#方法2

#v=$(echo $big $small | awk '')

v1=$(echo 1 3 | awk '')

v2=$(echo 5 3 | awk '')

#方法3

mem1=`echo "scale=2; a=1/3; if (length(a)==scale(a)) print 0;print a "|bc`

mem2=`echo "scale=2; a=5/3; if (length(a)==scale(a)) print 0;print a "|bc`

echo res1 is $res1

echo res2 is $res2

echo v1 is $v1

echo v2 is $v2

echo mem1 is $mem1

echo mem2 is $mem2

這裡提供了三種方法,其中第方法1、方法3使用的bc處理,方法2使用的awk處理。執行輸出結果我們看下:

[root@361way shell]# sh bc_point_zero.sh

res1 is 0.33

res2 is 1.66

v1 is 0.33

v2 is 1.67

mem1 is 0.33

mem2 is 1.66

三種方法我們可以看到,方法1、方法3對小數點後面的值不會四捨五入,而方法2(awk)方法使用printf 時會對小數點(浮點運算)的值四捨五入進製。所以浮點執行時還是建議使用awk處理。不過在取整數時,awk預設也是不會四捨五入的。

# echo 5 3 | awk ''

1# echo 5 3 | awk ''

2# echo 4 3 | awk ''

1awk在取整數運算時,是需要加0.5進行進製的。

注:沒有進製其實和小數點後保留的位數有關的,在小數點後的位數大於4時會自動進行進製,具體可以參考維基百科數值修約規則 。

小數點前的0的顯示問題

在處理資料時發現乙個問題,oracle對於小於1的小數,小數點前面的0是不顯示的。sql create table t1 number num number table created sql insert into t1 number values 0.3268 1 row inserted sq...

oracle查詢不顯示小數點前的0

1.問題起源 oracle 資料庫字段值為小於1的小數時,使用char型別處理,會丟失小數點前面的0 例如0.35就變成了.35 2.解決辦法 用to char函式格式化數字顯示 select to char 0.338,fm9999999990.00 from dual 結果 0.34 這裡重點要...

Lua不顯示小數點0的部分

我的環境 unity3d 5.3.7p4 xlua版本v2.1.6 基於lua5.3 在lua中數字不區分整型或浮點型,所有都是number,當你在整除時,返回的結果中帶有小數0,比如printf 100 10 輸出10.0 注意 在lua5.1.4的控制台模式,並不會出現此問題。如果輸入100 1...