如何使用Dart编程语言统计数字的总小数位数?
Dart 统计浮点数小数位数实现方案
针对你给出的浮点数2.78554,最简单的实现方式是将数值转为字符串后按小数点分割统计长度,代码如下:
void main() { double targetNum = 2.78554; List<String> numParts = targetNum.toString().split('.'); int decimalLength = numParts.length == 2 ? numParts[1].length : 0; print(decimalLength); // 输出结果为 5 }
注意事项
- 上述方案仅适用于非科学计数法表示的常规浮点数,如果要覆盖所有边界场景(比如科学计数法表示的极小值、整数值),可以使用下方的通用实现:
int getDecimalPlaces(double num) { // 整数直接返回0 if (num.isInteger) return 0; String numStr = num.toString(); // 处理科学计数法格式 if (numStr.contains('e')) { final splitE = numStr.split('e'); final exponent = int.parse(splitE[1]); final splitDot = splitE[0].split('.'); final baseDecimal = splitDot.length == 2 ? splitDot[1].length : 0; return baseDecimal - exponent; } // 常规小数处理 return numStr.split('.')[1].length; } void main() { print(getDecimalPlaces(2.78554)); // 5 print(getDecimalPlaces(123)); // 0 print(getDecimalPlaces(0.0001)); // 4 }
- 受浮点数精度特性影响,部分计算得到的浮点数会出现精度丢失(例如
0.1 + 0.2实际存储值为0.30000000000000004),这类场景下统计得到的小数位数会和预期不符,如果需要高精度统计,建议使用高精度数值类型存储目标数值后再做统计。
内容的提问来源于stack exchange,提问作者Kumar Anurag
相关产品推荐
相关产品推荐

