如何獲得餾分長度?如果可能的話,不使用字符串操作或循環餾分長度
should all return length of 3:
5.234
5.23400
5.234000
任何編程語言被接受
[編輯]
不是家庭作業,我想在其最小顯示量餾分。例如,我在數據庫中定義了數字(18,8)。如果用戶只輸入5.234,則保存在數據庫中的數據是5.23400000。我只想顯示它早在5.234僅
如何獲得餾分長度?如果可能的話,不使用字符串操作或循環餾分長度
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")
沒有字符串操作,沒有循環。
編輯:
BTW,有一個循環做到這一點:
result = 0
Do While (Int(num) !> num)
num *= 10
result += 1
Loop
Return result
稍微更優雅
這個很好。我即將解決重複分割問題(我放棄了無環路的解決方案)並計算'直到0,但不能這樣做,因爲分數是我所追求的,而不是整數。這是一個很好的邏輯! – Hao 2009-02-26 01:35:18
對於非小數部分,長度是:
int((ln(v)/ln(10))+.999)
只要V> 1式中,Ln()是自然對數和INT()總是舍入。對於v == 1,ln(v)返回0,所以你必須在特殊情況下處理這個。
它應該有可能實現小數部分相同的事情(v - int(v)
),但我的數學失敗了我。
我懷疑與自然日誌有關的任何事情都可能是有價值的。因爲String.format(「%x」,Double.doubleToRawLongBits(5.234))產生4014ef9db22d0e56,並且這個保留所有數字,估計爲5.2339999999999999857891452847979962825775146484375,而5.25可以精確表示。再次通過5.25100000000000033395508580724708735942840576171875近似5.251。我的觀點是長度在分數情況下不是單調的。 – 2012-07-02 22:46:14
只需實施除法算法。 當數字> 7或8位數字(用於float32)時停止,並且您停止
考慮到您關心顯示而不是內部表示,爲什麼不去掉尾部0?
#!/use/bin/perl
my @nums = ('5.234', '5.23400', '5.234000');
$_ =~ s/0+$// for @nums; # remove trailing 0s
$_ =~ s/\.$// for @nums; # remove trailing .
print "@nums\n";
你也許可以優化成一個單一的正則表達式。
實際上,5.234不能用IEEE 745的64位整數表示,實際上它大約爲5。233999999999999985789145284797996282577514648437500 ;-) – 2012-07-02 22:38:31
使用Java和JDBC時,通過ResultSet.getBigDecimal()獲取值。要獲得正確的比例,使用此代碼(Java 5中和了;還有就是在Java 1.4中的一個錯誤,這使得它失敗「0.0」):
int precision = v.stripTrailingZeros().scale();
對於Java 1.4,見this page。
在Java:
Double.valueOf("5.34000").toString();
我想,你可能無論如何都想將字符串轉換爲double。
這是功課嗎? – 2009-02-25 09:08:26