こんにちは、2つの数字を分割する必要があります。#!/bin/sh
$x = 5678
$x/1000
ただし、計算は整数のみを返します5
。
私はする必要があります5,678
。
頑張った
$x/1000.0
$x/1000.0 | bc
最初の方法は整数を期待します
2番目の方法:1つもありませんbc
。
答え1
あなたはそれを使用することができますawk
:
#! /bin/sh -
x=5678 y=1000
awk -- 'BEGIN{printf "%.3f\n", ARGV[1]/ARGV[2]}' "$x" "$y"
これを取得するかどうかは、ロケール5.678
(5,678
、、、$LC_ALL
変数)と実装(一部はロケールに関係なく使用されます)によって異なります。$LC_NUMERIC
$LANG
awk
.
GNU実装の場合は、ロケールの10進基本文字に従うように変数をその環境に渡すawk
必要があります。POSIXLY_CORRECT
これは数値入力にも当てはまります。
$ LC_ALL=fr_FR.UTF-8 POSIXLY_CORRECT=1 gawk -- 'BEGIN{
printf "%.3f\n", ARGV[1]/ARGV[2]}' 1,2 10
0,120
$ LC_ALL=fr_FR.UTF-8 POSIXLY_CORRECT=1 gawk -- 'BEGIN{
printf "%.3f\n", ARGV[1]/ARGV[2]}' 1.2 10
0,100
(後者の場合は、文字列を数値に明示的に変換するとき(ここで算術演算子を使用する場合など)、有効な数値を生成して無視する限り、できるだけ多く解析するためと解釈され1.2
ます。同じです。フランス語のロケールでは、代わりに小数点があるため理解できません。1
/
awk
.2
,
.
Byboxの実装では、オプションではなく引数の後にオプションを受け入れるため、POSIXと互換性がないため、--
オプションの終わりを表示するには使用する必要があります。awk
それがなければ、$x
orが負の$y
数であれば、上記の方法は機能しません。
またはリセットすることができます。$POSIXLY_CORRECT
これにより、標準的な方法でオプションを解析できます。 busyboxはawk
ロケール.
と$POSIXLY_CORRECT
。
答え2
次のdc
コードスニペットを使用して結果を取得できます。
$ dc -e "3k $x 1000/p"