[英]Dart check num is Double or Integer
在dart
,由於我是一個使用extension
的新手,我想做一個簡單的extension
來檢查值是否為 double。
extension numberExtension on num{
bool get isInteger => (this % 1) == 0;
bool get isDouble =>double.tryParse(this) != null;
}
這里isInteger
是正確的,但對於isDouble
我得到這個錯誤:
參數類型 'num' 不能分配給參數類型 'String'
問題是this
在isDouble
消氣!?
用this is double
替換double.tryParse(this) != null
假設任何不是整數的東西都是浮點數或雙精度數;
為什么不實現isDecimal
,例如:
extension numberExtension on num {
bool get isInteger => (this % 1) == 0;
bool get isDecimal => (this % 1) != 0;
}
更新; 查看文檔告訴我們:
float
,但至少有 64 位double
。int
始終為 64 位(就像double
),但按位和/或移位運算符將其截斷為 32 位(丟失數據或精度)。int
類型(只有 double 沒有十進制)。您的原始方法:
extension numberExtension on num { bool get isInteger => (this % 1) == 0; bool get isDouble =>double.tryParse(this) != null; }
不起作用,因為您的擴展名是num
,所以this
是一個num
。 double.tryParse
期望解析String
。
為什么不直接檢查對象是int
還是double
呢?
extension numberExtension on num {
bool get isInteger => this is int;
bool get isDouble => this is double;
}
當然,擴展並不是很有用,因為x.isDouble
使用x.isDouble
並不比直接使用x is double
方便多少,而后者的好處是允許自動進行類型提升。
(此外,對於網絡版 Dart,其中int
和double
類型都由 JavaScript 數字支持,數字可以同時報告為int
和double
,但使用% 1
和double.tryParse
等啟發式方法double.tryParse
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.