我有一個Double值小數點後:尋找的名額的雙
double a = 4.5565;
是什麼(在這種情況下4)小數點後計算的位數的最簡單方法。
我知道我可以轉換爲字符串,並做一個分割,並採取長度。但有沒有更簡單的方法?
我有一個Double值小數點後:尋找的名額的雙
double a = 4.5565;
是什麼(在這種情況下4)小數點後計算的位數的最簡單方法。
我知道我可以轉換爲字符串,並做一個分割,並採取長度。但有沒有更簡單的方法?
有沒有簡單的方法,特別是因爲從數學角度來說數字的數量可能遠遠超過顯示。例如,4.5565實際上存儲爲4.556499999999999772626324556767940521240234375
(感謝harold用於計算)。你很難找到解決這個問題的有效方法。
編輯
您可以想出一些算法是這樣工作的:圓形,如果像你計算十進制表示,你會發現一定數量的連續787-9(或零),你(或向下)到9s(或0)系列開始之前的最後一個地方。我懷疑你會發現比你預期的更麻煩。
我想字符串溶液是最好的:((a-(int)a)+"").length-2
而不是拆分,你只是不計算字符串中的「0」。與blitzkriegz的解決方案 – 2012-02-21 23:10:47
@ L.B沒什麼不同,但在我的解決方案中不需要分配數組。它會好一點。 – james 2012-02-21 23:22:32
添加「」是調用'ToString()'的真正可怕的選擇。 – 2012-02-21 23:43:14
var precision = 0;
var x = 1.345678901m;
while (x*(decimal)Math.Pow(10,precision) !=
Math.Round(x*(decimal)Math.Pow(10,precision)))
precision++;
precision
將等於的十進制值的顯著數字的數目(x設置爲1.23456000將導致5精密即使8位數字是最初在文字中指定)。這在時間上與小數位數成比例地執行。它只計算小數位數;您可以通過取Math.Log10(x)的整數部分來計算小數點左邊的位數。它最適用於小數點,因爲它們具有更好的值精度,因此舍入誤差更小。
您的解決方案非常優雅,謝謝 – 2017-02-07 09:47:54
寫一個函數
int CountDigitsAfterDecimal(double value)
{
bool start = false;
int count = 0;
foreach (var s in value.ToString())
{
if (s == '.')
{
start = true;
}
else if (start)
{
count++;
}
}
return count;
}
有一個非常好的文章地處STSdb論壇:Number of digits after decimal point. 它總結了許多已知的實現 - 的ToString(),10方法等較先進的方法的權力。提供比較測試,其顯示哪種方法是最快的。提供的解決方案適用於雙精度和十進制類型。
鏈接已損壞 – berkeleybross 2015-12-21 20:02:12
當前網址顯示爲:http://stssoft.com/forum/threads/462-Number-of-digits-after-decimal-point但是,內容被阻擋在註冊牆後面,所以我無法驗證內容。 – 2016-08-24 20:53:32
@Kris對於斷開的鏈接,您的答案不再有用。請修復或刪除。 – 2017-01-04 04:25:07
我也許會使用此代碼,如果我需要,
myDoubleNumber.ToString("R").Split('.')[1].Length
"R"
這裏是Round Trip Format Specifier
我們需要檢查該指數範圍首先當然。
我認爲這可能是一個解決方案:
private static int getDecimalCount(double val)
{
int i=0;
while (Math.Round(val, i) != val)
i++;
return i;
}
double val9 = 4.5565d; int count9 = getDecimalCount(val9);//result: 4
你所說的 「容易」 是什麼意思?我懷疑從書寫/閱讀的角度來看有什麼更容易的,但是例如在CPU操作方面可能更容易一些。 – Snowbear 2012-02-21 23:01:40
這實際上並不可行。 HTTP://en.wikipedia。org/wiki/Double-precision_floating-point_format – SLaks 2012-02-21 23:02:27
'a'的值可能不完全是4.5565。如果你不明白爲什麼,我建議你閱讀:http://csharpindepth.com/Articles/General/FloatingPoint.aspx – 2012-02-21 23:03:05