簡體   English   中英

Dart check num 是 Double 或 Integer

[英]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'

問題是thisisDouble消氣!?

this is double替換double.tryParse(this) != null

假設任何不是整數的東西都是浮點數或雙精度數;

為什么不實現isDecimal ,例如:

extension numberExtension on num {
  bool get isInteger => (this % 1) == 0;
  bool get isDecimal => (this % 1) != 0;
}

更新; 查看文檔告訴我們:

  • Dart 似乎不支持 32 位float ,但至少有 64 位double
  • int始終為 64 位(就像double ),但按位和/或移位運算符將其截斷為 32 位(丟失數據或精度)。
  • 此外,如果編譯成 JavaScript,則沒有真正的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,其中intdouble類型都由 JavaScript 數字支持,數字可以同時報告為intdouble ,但使用% 1double.tryParse等啟發式方法double.tryParse 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM