分数の長さを取得する方法は? 可能な限り、文字列操作やループを使用せずに
should all return length of 3:
5.234
5.23400
5.234000
任意のプログラミング言語が受け入れられます
[編集]
宿題ではなく、分数を最小で表示したいです。例として、データベースに数値 (18,8) を定義しました。ユーザーが 5.234 のみを入力した場合、データベースに保存されるデータは 5.23400000 です。5.234のみとして表示したいだけです
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
少しエレガントに
JavaおよびJDBCを使用する場合は、ResultSet.getBigDecimal()を介して値を取得します。正しいスケールを取得するには、次のコードを使用します(Java5以降。Java1.4には「0.0」で失敗するバグがあります)。
int precision = v.stripTrailingZeros().scale();
Java 1.4については、このページを参照してください。
Javaの場合:
Double.valueOf("5.34000").toString();
とにかく文字列をdoubleに変換したいかもしれません。
非分数部分の長さは次のとおりです。
int((ln(v)/ln(10))+.999)
v > 1 である限り、ln() は自然対数で、int() は常に切り捨てられます。v == 1 の場合、ln(v) は 0 を返すため、これを特別なケースで処理する必要があります。
分数部分 ( ) についても同じことを達成できるはずですv - int(v)
が、私の数学はうまくいきません。
除算アルゴリズムを実装するだけです。そして、数値カウントが7桁または8桁を超えると停止します(float32の場合)