2

分数の長さを取得する方法は? 可能な限り、文字列操作やループを使用せずに

should all return length of 3:
5.234
5.23400
5.234000

任意のプログラミング言語が受け入れられます

[編集]

宿題ではなく、分数を最小で表示したいです。例として、データベースに数値 (18,8) を定義しました。ユーザーが 5.234 のみを入力した場合、データベースに保存されるデータは 5.23400000 です。5.234のみとして表示したいだけです

4

6 に答える 6

2
If Int(num) = num Then Return 0
num *= 10
If Int(num) = num Then Return 1
num *= 10
If Int(num) = num Then Return 2
num *= 10
If Int(num) = num Then Return 3
num *= 10
If Int(num) = num Then Return 4
num *= 10
If Int(num) = num Then Return 5
num *= 10
If Int(num) = num Then Return 6
num *= 10
If Int(num) = num Then Return 7
num *= 10
If Int(num) = num Then Return 8
Throw New Exception("Number exceeds expected precision")

文字列操作もループもありません。

編集:

ところで、ループでこれを行うには:

result = 0
Do While (Int(num) !> num) 
    num *= 10
    result += 1
Loop
Return result

少しエレガントに

于 2009-02-25T10:29:53.543 に答える
0

JavaおよびJDBCを使用する場合は、ResultSet.getBigDecimal()を介して値を取得します。正しいスケールを取得するには、次のコードを使用します(Java5以降。Java1.4には「0.0」で失敗するバグがあります)。

int precision = v.stripTrailingZeros().scale();

Java 1.4については、このページを参照してください。

于 2009-02-25T09:35:09.743 に答える
0

Javaの場合:

Double.valueOf("5.34000").toString();

とにかく文字列をdoubleに変換したいかもしれません。

于 2009-02-26T13:46:30.863 に答える
0

非分数部分の長さは次のとおりです。

int((ln(v)/ln(10))+.999)

v > 1 である限り、ln() は自然対数で、int() は常に切り捨てられます。v == 1 の場合、ln(v) は 0 を返すため、これを特別なケースで処理する必要があります。

分数部分 ( ) についても同じことを達成できるはずですv - int(v)が、私の数学はうまくいきません。

于 2009-02-25T09:14:22.150 に答える
0

除算アルゴリズムを実装するだけです。そして、数値カウントが7桁または8桁を超えると停止します(float32の場合)

于 2009-02-25T09:21:26.873 に答える