計數精確位數
回答
你可以得到一個decimal
的「規模」是這樣的:
static byte GetScale(decimal d)
{
return BitConverter.GetBytes(decimal.GetBits(d)[3])[2];
}
說明:decimal.GetBits
返回四個int
值的數組,其中我們只取最後一個值。正如鏈接頁面所述,我們只需要從構成此int
的四個字節中的第二個到最後一個byte
,我們用BitConverter.GetBytes
來完成。
示例:3.14m
的比例尺爲2
。 3.14000m
的比例是5
。 123456m
的比例是0
。 123456.0m
的比例是1
。
如果代碼可以大端系統上運行,它是可能,你必須修改到BitConverter.GetBytes(decimal.GetBits(d)[3])[BitConverter.IsLittleEndian ? 2 : 1]
或類似的東西。我沒有測試過。請參閱下面的相關評論。
這仍然可以在一個不同的排序系統上工作嗎? –
@relatively_random不確定。 .NET是否在大端系統上運行.NET的實現?我想我們必須從.NET的那些實現中查閱'decimal.GetBits'和'BitConverter.GetBytes'的文檔,以確定它們的輸出是否依賴於字節順序。我看到Microsoft .NET有一個字段「BitConverter.IsLittleEndian」,我不知道他們是否構建了大端架構的框架。相關:[關於Endian-ness和.Net的詳細信息](http://stackoverflow.com/questions/3162986/) –
根據你的鏈接,有一些big-endian的.NET實現。根據[MSDN](https://msdn.microsoft.com/en-us/library/system.bitconverter.aspx),BitConverter對字節順序非常敏感。我會解釋什麼是寫有關[Decimal.GetBits](https://msdn.microsoft.com/en-us/library/system.decimal.getbits.aspx),它會產生相同的輸出,無論機器。所以應該修改該方法來檢查BitConverter.IsLittleEndian並且如果爲false則獲取字節索引1。 –
public int CountDecPoint(decimal d){
string[] s = d.ToString().Split('.');
return s.Length == 1 ? 0 : s[1].Length;
}
通常情況下,小數點分隔符是.
,但對付不同的文化,這個代碼會更好:
public int CountDecPoint(decimal d){
string[] s = d.ToString().Split(Application.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]);
return s.Length == 1 ? 0 : s[1].Length;
}
不過,如果你打了很多電話,這並不會奏效。 – BanksySan
我知道我正在復活一個古老的問題,但這裏的版本不依賴於字符串表示,實際上忽略了尾隨零。當然,如果這是需要的話。
public static int GetMinPrecision(this decimal input)
{
if (input < 0)
input = -input;
int count = 0;
input -= decimal.Truncate(input);
while (input != 0)
{
++count;
input *= 10;
input -= decimal.Truncate(input);
}
return count;
}
- 1. PHP:rowCount()現在精確計數?
- 2. 計算浮點數上的精確值的最大位數
- 3. 精確地將浮點數/小數點精確到小數點後3位?
- 4. 在java中保留精確到小數位的精確度
- 5. 使用精確位置的文件中的Python計數行
- 6. gfortran REAL不精確到8位小數
- 7. python中最精確的計時函數
- 8. 使用mgo精確計算小數點
- 9. Android - 精確的數學計算
- 10. 小數精確
- 11. 精確計算雙精度
- 12. 獲取小數位的精確精度從雙在.net 3.5
- 13. 這些雙精度值如何精確到20位小數?
- 14. 精確Reduce函數
- 15. 精確倒計時?
- 16. 如何精確打印浮點數或雙精度型變量的小數位數至100位?
- 17. 泰勒級數 - 計算sin(x)直到6位數精度
- 18. 如何根據位數計算精度的十進制數字?
- 19. 精確定時大數據集計算的線程數量?
- 20. 爲什麼我的函數沒有返回精確的計數?
- 21. 如何獲得FASTA精確匹配的正確計數?
- 22. FusedLocationProvider - 精確位置和wifi
- 23. 獲取GPS定位精確
- 24. Perl打印精確位置
- 25. Android更精確定位
- 26. 精確查看定位
- 27. 浮點數不精確
- 28. pandas.date_range精確頻率參數
- 29. C中的精確數字?
- 30. 精確到浮點小數?
所以如果你除以2得到6.0005那麼應該拋出一個異常?祝你好運,寫數學庫以配合這一點。 –