修复 “cargo clippy -- -D warnings” 产生的错误

This commit is contained in:
YuWuKunCheng
2026-05-30 13:25:57 +08:00
parent 22109d8b30
commit af3ebf13c8
13 changed files with 162 additions and 189 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
[package]
name = "chanlun-py"
version = "26.5.101"
version = "26.5.102"
edition = "2021"
description = "缠论技术分析库 — Rust 高性能 Python 绑定"
authors = ["YuYuKunKun"]
@@ -12,7 +12,7 @@ crate-type = ["cdylib"]
name = "chanlun"
[dependencies]
chanlun = "26.5.5" # { path = "../chanlun" }
chanlun = { path = "../chanlun" }
pyo3 = { version = "0.28", features = ["experimental-inspect"] }
serde_json = "1"
chrono = "0.4"
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "maturin"
[project]
name = "chanlun"
version = "2605.101"
version = "2605.102"
description = "缠论技术分析库 — Rust 高性能实现"
readme = { file = "README.md", content-type = "text/markdown" }
license = { file = "LICENSE", content-type = "text/plain" }
+15 -24
View File
@@ -78,16 +78,18 @@ impl 笔 {
- _k.K线.read().unwrap().)
.unsigned_abs() as usize;
// 向上笔
if .().() && _k..get() < .() {
if >= ._原始数量 as usize {
return . as usize;
}
if .().()
&& _k..get() < .()
&& >= ._原始数量 as usize
{
return . as usize;
}
// 向下笔
if .().() && _k..get() > .() {
if >= ._原始数量 as usize {
return . as usize;
}
if .().()
&& _k..get() > .()
&& >= ._原始数量 as usize
{
return . as usize;
}
}
}
@@ -960,22 +962,11 @@ impl 笔 {
for i in 3...len() - 1 {
let k = &[i];
if *k..read().unwrap() == Some(::) && .() == ::
{
let = Arc::clone(&[i - 1]);
let = Arc::clone(k);
let = Arc::clone(&[i + 1]);
let = ::new(Some(), , Some());
let = 线::(Arc::clone(&), Arc::new(), true);
.
.store(..load(Ordering::Relaxed), Ordering::Relaxed);
if Self::(&, ) {
.push();
}
} else if *k..read().unwrap() == Some(::)
&& .() == ::
{
let =
*k..read().unwrap() == Some(::) && .() == ::;
let =
*k..read().unwrap() == Some(::) && .() == ::;
if || {
let = Arc::clone(&[i - 1]);
let = Arc::clone(k);
let = Arc::clone(&[i + 1]);
+4 -4
View File
@@ -39,13 +39,13 @@ impl 背驰分析 {
) -> bool {
let MACD = Self::_获取MACD面积(
K线序列,
&*...K线.read().unwrap(),
&*..read().unwrap()..K线.read().unwrap(),
&...K线.read().unwrap(),
&..read().unwrap()..K线.read().unwrap(),
);
let MACD = Self::_获取MACD面积(
K线序列,
&*...K线.read().unwrap(),
&*..read().unwrap()..K线.read().unwrap(),
&...K线.read().unwrap(),
&..read().unwrap()..K线.read().unwrap(),
);
// 计算面积(绝对值求和)
+6 -6
View File
@@ -415,7 +415,7 @@ impl 中枢 {
: &mut Vec<Arc<>>,
: &Arc<>,
) -> Option<Arc<>> {
if .last().map(|x| Arc::as_ptr(x)) == Some(Arc::as_ptr()) {
if .last().map(Arc::as_ptr) == Some(Arc::as_ptr()) {
.pop()
} else {
None
@@ -430,7 +430,7 @@ impl 中枢 {
: &mut Vec<Arc<>>,
: bool,
: &str,
: i64,
_层级: i64,
) {
if 线.len() < 3 {
return;
@@ -472,7 +472,7 @@ impl 中枢 {
));
Self::(, );
// Python: return 中枢递归分析(虚线序列, 中枢序列, ...)
Self::(线, , , , );
Self::(线, , , , _层级);
return;
}
}
@@ -487,7 +487,7 @@ impl 中枢 {
if needs_pop {
let = Arc::clone(&[_idx]);
Self::(, &);
Self::(线, , , , );
Self::(线, , , , _层级);
return;
}
@@ -508,8 +508,8 @@ impl 中枢 {
let mut = [_idx].();
let mut : Vec<Arc<线>> = Vec::new();
for i in ..线.len() {
let 线 = Arc::clone(&线[i]);
for 线_ref in &线[..] {
let 线 = Arc::clone(线_ref);
// 检查是否超出中枢范围(缺口)
if crate::types::::(, , 线.(), 线.()).()
+67 -83
View File
@@ -38,6 +38,14 @@ use std::sync::Arc;
/// 线段 — 从笔生成线段的算法集合(静态方法命名空间)
pub struct 线;
type = (
Vec<Arc<线>>,
Vec<Arc<线>>,
Vec<Arc<线>>,
Option<Arc<线>>,
);
type = (Vec<Arc<>>, Vec<Arc<>>, Vec<Arc<>>);
impl 线 {
// ================================================================
// 基础操作
@@ -53,8 +61,7 @@ impl 线段 {
let = Self::(_rc);
if !..read().unwrap().is_empty() {
if !::(
&*
.
&.
.read()
.unwrap()
.last()
@@ -182,11 +189,9 @@ impl 线段 {
if !.iter().any(|x| Arc::as_ptr(x) == Arc::as_ptr()) {
break;
}
if !.is_empty() {
if !.last().unwrap().() {
eprintln!("线段._验证序列 数据不连续");
break;
}
if !.is_empty() && !.last().unwrap().() {
eprintln!("线段._验证序列 数据不连续");
break;
}
.push(Arc::clone());
}
@@ -204,10 +209,8 @@ impl 线段 {
if !.iter().any(|x| Arc::as_ptr(x) == Arc::as_ptr()) {
break;
}
if !.is_empty() {
if !.last().unwrap().() {
break;
}
if !.is_empty() && !.last().unwrap().() {
break;
}
.push(Arc::clone());
}
@@ -301,7 +304,7 @@ impl 线段 {
/// 特征分型终结 — 检查特征序列是否形成正常分型终结
pub fn (: &线) -> bool {
let = 线::(
&*..read().unwrap(),
&..read().unwrap(),
.(),
&Self::(),
false,
@@ -347,11 +350,9 @@ impl 线段 {
return;
}
for in & {
if let Some(ref f) = {
if f.() == .() {
panic!("特征序列方向不匹配[{}]", );
}
for f in .iter().flatten() {
if f.() == .() {
panic!("特征序列方向不匹配[{}]", );
}
}
@@ -472,15 +473,7 @@ impl 线段 {
// ================================================================
/// 分割序列 — 将线段的基础序列分为前、后、第三买卖线、贯穿伤
pub fn (
: &线,
: Option<&>,
) -> (
Vec<Arc<线>>,
Vec<Arc<线>>,
Vec<Arc<线>>,
Option<Arc<线>>,
) {
pub fn (: &线, : Option<&>) -> {
if ..read().unwrap().as_str() != "文武" {
return (
..read().unwrap().clone(),
@@ -517,9 +510,9 @@ impl 线段 {
let mut = None;
if let Some(ref ) = {
if let Some() = {
*._第三买卖线.write().unwrap() = None;
let = if let Some(ref ) = .last() {
let = if let Some() = .last() {
..read().unwrap().clone()
} else {
..read().unwrap().clone()
@@ -572,7 +565,7 @@ impl 线段 {
if !线.is_empty() {
线.reverse();
if let Some(ref ) = {
if let Some() = {
*._第三买卖线.write().unwrap() = Some(Arc::clone(&线[0]));
}
}
@@ -626,13 +619,11 @@ impl 线段 {
}) == Some(true)
{
Some(Arc::clone(..last().unwrap()))
} else if let Some(b) = ::(
&*2..read().unwrap(),
&*..last().unwrap()..read().unwrap(),
) {
Some(b)
} else {
None
::(
&2..read().unwrap(),
&..last().unwrap()..read().unwrap(),
)
};
if .is_none() {
@@ -686,14 +677,11 @@ impl 线段 {
}
/// 获取内部中枢序列 — 内部实现
fn _内部(
: &线,
_配置: &,
) -> (Vec<Arc<>>, Vec<Arc<>>, Vec<Arc<>>) {
fn _内部(: &线, _配置: &) -> {
if ..read().unwrap().as_str() != "文武" {
::(
&*..read().unwrap(),
&mut *._中枢序列.write().unwrap(),
&..read().unwrap(),
&mut ._中枢序列.write().unwrap(),
true,
&format!(
"{}_{}_合_",
@@ -714,7 +702,7 @@ impl 线段 {
::(
&,
&mut *._中枢序列.write().unwrap(),
&mut ._中枢序列.write().unwrap(),
true,
&format!(
"{}_{}_实_",
@@ -725,7 +713,7 @@ impl 线段 {
);
::(
&,
&mut *._中枢序列.write().unwrap(),
&mut ._中枢序列.write().unwrap(),
true,
&format!(
"{}_{}_虚_",
@@ -735,8 +723,8 @@ impl 线段 {
0,
);
::(
&*..read().unwrap(),
&mut *._中枢序列.write().unwrap(),
&..read().unwrap(),
&mut ._中枢序列.write().unwrap(),
true,
&format!(
"{}_{}_合_",
@@ -755,9 +743,8 @@ impl 线段 {
/// 获取内部中枢序列
pub fn (
_rc: &Arc<线>,
: &,
) -> (Vec<Arc<>>, Vec<Arc<>>, Vec<Arc<>>) {
_rc: &Arc<线>, : &
) -> {
let = Self::(_rc);
Self::_内部(, )
}
@@ -942,7 +929,7 @@ impl 线段 {
*cur..write().unwrap() = 线;
}
let idx = 线.len() - 1;
Self::(&mut 线[idx], );
Self::(&线[idx], );
true
}
@@ -1038,7 +1025,7 @@ impl 线段 {
}
}
if let Some(_) = _opt {
if _opt.is_some() {
let idx = 线.len() - 1;
let seg_rc = Arc::clone(&线[idx]);
for 线 in & {
@@ -1047,7 +1034,7 @@ impl 线段 {
线[idx] = seg_rc;
}
let idx = 线.len() - 1;
Self::(&mut 线[idx], );
Self::(&线[idx], );
let 线 = Arc::clone(&线[idx]);
if 线..read().unwrap().len() >= 3
@@ -1310,8 +1297,8 @@ impl 线段 {
}
// ---- 3. 确保当前线段有效 ----
let mut 线_rc = Arc::clone(线.last().unwrap());
Self::(&mut 线_rc, );
let 线_rc = Arc::clone(线.last().unwrap());
Self::(&线_rc, );
let seg_idx = 线.len() - 1;
线[seg_idx] = 线_rc;
@@ -1347,7 +1334,7 @@ impl 线段 {
// Refresh current segment
let idx = 线.len() - 1;
Self::(&mut 线[idx], );
Self::(&线[idx], );
// ---- 5. 调用一次全局修正 ----
Self::_缺口突破(线, , );
@@ -1375,20 +1362,20 @@ impl 线段 {
let mut = false;
for i in ...len() {
let 线 = Arc::clone(&[i]);
for 线_ref in &[..] {
let 线 = Arc::clone(线_ref);
let 线 = Arc::clone(线.last().unwrap());
let = Self::(&线);
// 向当前线段添加笔
let mut 线_rc = Arc::clone(线.last().unwrap());
Self::线(&mut 线_rc, Arc::clone(&线));
let 线_rc = Arc::clone(线.last().unwrap());
Self::线(&线_rc, Arc::clone(&线));
let seg_idx = 线.len() - 1;
线[seg_idx] = 线_rc;
// 刷新
let idx = 线.len() - 1;
Self::(&mut 线[idx], );
Self::(&线[idx], );
// 依次尝试四种修正
if Self::_缺口突破(线, , ) {
@@ -1444,14 +1431,14 @@ impl 线段 {
break;
}
// 向新段添加当前虚线
let mut _rc = Arc::clone(线.last().unwrap());
Self::线(&mut _rc, Arc::clone(&线));
let _rc = Arc::clone(线.last().unwrap());
Self::线(&_rc, Arc::clone(&线));
let seg_idx = 线.len() - 1;
线[seg_idx] = _rc;
}
let idx = 线.len() - 1;
Self::(&mut 线[idx], );
Self::(&线[idx], );
}
if {
@@ -1572,8 +1559,8 @@ impl 线段 {
}
// 验证当前线段
let mut 线_rc = Arc::clone(线.last().unwrap());
Self::(&mut 线_rc, 线);
let 线_rc = Arc::clone(线.last().unwrap());
Self::(&线_rc, 线);
let seg_idx = 线.len() - 1;
线[seg_idx] = 线_rc;
@@ -1597,7 +1584,7 @@ impl 线段 {
*cur..write().unwrap() = ;
}
let seg_idx = 线.len() - 1;
Self::(&mut 线[seg_idx], 0);
Self::(&线[seg_idx], 0);
} else {
let = Arc::clone(线.last().unwrap());
Self::_弹出扩展线段(线, &, line!());
@@ -1608,7 +1595,7 @@ impl 线段 {
// 武终
let idx = 线.len() - 1;
Self::(&mut 线[idx], 0);
Self::(&线[idx], 0);
let 线 = Arc::clone(线.last().unwrap());
if 线
@@ -1647,18 +1634,18 @@ impl 线段 {
let = ::(.(), .(), .(), .());
if .() {
let mut _rc = Arc::clone(线.last().unwrap());
Self::线(&mut _rc, Arc::clone());
let _rc = Arc::clone(线.last().unwrap());
Self::线(&_rc, Arc::clone());
let seg_idx = 线.len() - 1;
线[seg_idx] = _rc;
let mut _rc = Arc::clone(线.last().unwrap());
Self::线(&mut _rc, Arc::clone());
let _rc = Arc::clone(线.last().unwrap());
Self::线(&_rc, Arc::clone());
let seg_idx = 线.len() - 1;
线[seg_idx] = _rc;
let seg_idx = 线.len() - 1;
Self::(&mut 线[seg_idx], 0);
Self::(&线[seg_idx], 0);
continue;
}
@@ -1730,8 +1717,8 @@ impl 线段 {
{
let k线序列 = K线::rc(
&.K线序列,
&*[.len() - 3]...K线.read().unwrap(),
&*[.len() - 1]
&[.len() - 3]...K线.read().unwrap(),
&[.len() - 1]
.
.read()
.unwrap()
@@ -1851,15 +1838,13 @@ impl 线段 {
for in & {
if .len() >= 3 {
let = ::(, );
let mut : Vec<Arc<线>> =
.into_iter().map(|b| Arc::new(b)).collect();
let mut : Vec<Arc<线>> = .into_iter().map(Arc::new).collect();
.push(Arc::clone());
for in & {
.push(Arc::clone());
线.clear();
let _slice: Vec<Arc<线>> =
.iter().map(|b| Arc::clone(b)).collect();
let _slice: Vec<Arc<线>> = .iter().map(Arc::clone).collect();
Self::(
&_slice,
&mut 线,
@@ -1881,13 +1866,12 @@ impl 线段 {
if ! {
if let Some(线) = 线.last() {
if 线..read().unwrap().len() % 2 == 1 {
let =
线::线(&*线..read().unwrap());
let = 线::线(&线..read().unwrap());
.
.store(..load(Ordering::Relaxed), Ordering::Relaxed);
let mut _rc = Arc::new();
Self::(&mut _rc, &.);
let _rc = Arc::new();
Self::(&_rc, &.);
let _inner =
Arc::try_unwrap(_rc).unwrap_or_else(|rc| (*rc).clone());
if _inner.() == .() {
@@ -1919,8 +1903,8 @@ impl 线段 {
let mut = Vec::new();
for in {
let mut _rc = Arc::new();
Self::(&mut _rc, &.);
let _rc = Arc::new();
Self::(&_rc, &.);
if Self::线(&_rc, ) {
.push(Arc::clone(&_rc..read().unwrap().));
}
+1
View File
@@ -77,6 +77,7 @@ impl Default for 随机指标 {
impl {
/// 首次计算 KDJ(无历史数据时)
#[allow(clippy::too_many_arguments)]
pub fn (
: f64,
: f64,
+1
View File
@@ -141,6 +141,7 @@ impl K线 {
}
/// 创建普通K线
#[allow(clippy::too_many_arguments)]
pub fn K(
: &str,
: i64,
+41 -49
View File
@@ -199,19 +199,16 @@ impl 缠论K线 {
if k线..load(Ordering::Relaxed) <= k..load(Ordering::Relaxed)
&& k..load(Ordering::Relaxed)
<= k线..load(Ordering::Relaxed) + k线.
&& (k线..get() - k..get()).abs() < f64::EPSILON
{
if (k线..get() - k..get()).abs() < f64::EPSILON
{
return k..load(Ordering::Relaxed);
}
return k..load(Ordering::Relaxed);
}
} else if k..load(Ordering::Relaxed) <= k线..load(Ordering::Relaxed)
&& k线..load(Ordering::Relaxed)
<= k..load(Ordering::Relaxed) + k.
&& (k线..get() - k..get()).abs() < f64::EPSILON
{
if (k线..get() - k..get()).abs() < f64::EPSILON {
return k..load(Ordering::Relaxed);
}
return k..load(Ordering::Relaxed);
}
}
}
@@ -219,6 +216,7 @@ impl 缠论K线 {
}
/// 创建缠K
#[allow(clippy::too_many_arguments)]
pub fn K(
: i64,
: f64,
@@ -420,43 +418,41 @@ impl 缠论K线 {
if K. == K线. {
// 同时间戳更新
K线. = K.;
if . {
if K序列.len() >= 2 {
if let Some(ref prev_macd) = K序列[K序列.len() - 2].macd {
K线.macd = Some(线::(
prev_macd,
K线取值(
K线.,
K线.,
K线.,
K线.,
&.,
),
K线.,
));
}
if let Some(ref prev_rsi) = K序列[K序列.len() - 2].rsi {
K线.rsi = Some(::(
prev_rsi,
K线取值(
K线.,
K线.,
K线.,
K线.,
&.,
),
K线.,
));
}
if let Some(ref prev_kdj) = K序列[K序列.len() - 2].kdj {
K线.kdj = Some(::(
prev_kdj,
if . && K序列.len() >= 2 {
if let Some(ref prev_macd) = K序列[K序列.len() - 2].macd {
K线.macd = Some(线::(
prev_macd,
K线取值(
K线.,
K线.,
K线.,
K线.,
K线.,
));
}
&.,
),
K线.,
));
}
if let Some(ref prev_rsi) = K序列[K序列.len() - 2].rsi {
K线.rsi = Some(::(
prev_rsi,
K线取值(
K线.,
K线.,
K线.,
K线.,
&.,
),
K线.,
));
}
if let Some(ref prev_kdj) = K序列[K序列.len() - 2].kdj {
K线.kdj = Some(::(
prev_kdj,
K线.,
K线.,
K线.,
K线.,
));
}
}
K序列.pop();
@@ -514,7 +510,7 @@ impl 缠论K线 {
if !K序列.is_empty() {
let len = K序列.len();
let (, ) = K序列.split_at_mut(len - 1);
let K: Option<&K线> = .last().map(|rc| Arc::as_ref(rc));
let K: Option<&K线> = .last().map(Arc::as_ref);
let K = &*[0];
let (K, ) = Self::(K, K, K线_ref, );
@@ -614,7 +610,7 @@ impl 缠论K线 {
Arc::clone(&K序列[idx - 2]),
Some(Arc::clone(&K序列[idx - 1])),
));
return (, Some());
(, Some())
}
/// 截取缠K序列从始到终
@@ -623,12 +619,8 @@ impl 缠论K线 {
: &K线,
: &K线,
) -> Option<Vec<Arc<K线>>> {
let _idx =
.iter()
.position(|k| Arc::as_ptr(k) == ( as *const _))?;
let _idx =
.iter()
.position(|k| Arc::as_ptr(k) == ( as *const _))?;
let _idx = .iter().position(|k| std::ptr::eq(Arc::as_ptr(k), ))?;
let _idx = .iter().position(|k| std::ptr::eq(Arc::as_ptr(k), ))?;
Some([_idx..=_idx].to_vec())
}
}
+19 -16
View File
@@ -435,8 +435,8 @@ impl 虚线 {
pub fn MACD柱子均值(K序列: &[Arc<K线>], 线: &线) -> f64 {
let K线序列 = K线::rc(
K序列,
&*线...K线.read().unwrap(),
&*线..read().unwrap()..K线.read().unwrap(),
&线...K线.read().unwrap(),
&线..read().unwrap()..K线.read().unwrap(),
);
if K线序列.is_empty() {
return 0.0;
@@ -453,8 +453,8 @@ impl 虚线 {
pub fn MACD柱子均值_阴(K序列: &[Arc<K线>], 线: &线) -> Option<f64> {
let K线序列 = K线::rc(
K序列,
&*线...K线.read().unwrap(),
&*线..read().unwrap()..K线.read().unwrap(),
&线...K线.read().unwrap(),
&线..read().unwrap()..K线.read().unwrap(),
);
let : Vec<f64> = K线序列
.iter()
@@ -473,8 +473,8 @@ impl 虚线 {
pub fn MACD柱子均值_阳(K序列: &[Arc<K线>], 线: &线) -> Option<f64> {
let K线序列 = K线::rc(
K序列,
&*线...K线.read().unwrap(),
&*线..read().unwrap()..K线.read().unwrap(),
&线...K线.read().unwrap(),
&线..read().unwrap()..K线.read().unwrap(),
);
let : Vec<f64> = K线序列
.iter()
@@ -549,8 +549,8 @@ impl 虚线 {
};
let K线序列 = K线::rc(
K序列,
&*线...K线.read().unwrap(),
&*线..read().unwrap()..K线.read().unwrap(),
&线...K线.read().unwrap(),
&线..read().unwrap()..K线.read().unwrap(),
);
let : Vec<f64> = K线序列
.iter()
@@ -583,7 +583,7 @@ impl 虚线 {
if == :: {
let : Vec<&Arc<K线>> = K序列
.iter()
.filter(|k| k.macd.as_ref().map_or(false, |m| m.MACD柱 > 0.0))
.filter(|k| k.macd.as_ref().is_some_and(|m| m.MACD柱 > 0.0))
.collect();
if .is_empty() {
return [false, false, false];
@@ -603,7 +603,7 @@ impl 虚线 {
.unwrap_or(std::cmp::Ordering::Equal)
})
.unwrap();
let mut = vec![Arc::clone(*), Arc::clone()];
let mut = [Arc::clone(*), Arc::clone()];
.sort_by_key(|k| k.);
if let (Some(m0), Some(m1)) = ([0].macd.as_ref(), [1].macd.as_ref()) {
if m0.MACD柱 > m1.MACD柱 && [0]. < [1]. {
@@ -649,7 +649,7 @@ impl 虚线 {
} else {
let : Vec<&Arc<K线>> = K序列
.iter()
.filter(|k| k.macd.as_ref().map_or(false, |m| m.MACD柱 < 0.0))
.filter(|k| k.macd.as_ref().is_some_and(|m| m.MACD柱 < 0.0))
.collect();
if .is_empty() {
return [false, false, false];
@@ -670,7 +670,7 @@ impl 虚线 {
.unwrap_or(std::cmp::Ordering::Equal)
})
.unwrap();
let mut = vec![Arc::clone(*), Arc::clone()];
let mut = [Arc::clone(*), Arc::clone()];
.sort_by_key(|k| k.);
if let (Some(m0), Some(m1)) = ([0].macd.as_ref(), [1].macd.as_ref()) {
if m0.MACD柱 < m1.MACD柱 && [0]. > [1]. {
@@ -947,10 +947,13 @@ impl 虚线 {
}
}
if ! && && 线..read().unwrap()..MACD柱子匹配() {
if Self::MACD极值(K序列, 线) && .len() > 2 {
return (true, "没结果, 极值, 柱子分型匹配, 背驰过大于2次".into());
}
if !
&&
&& 线..read().unwrap()..MACD柱子匹配()
&& Self::MACD极值(K序列, 线)
&& .len() > 2
{
return (true, "没结果, 极值, 柱子分型匹配, 背驰过大于2次".into());
}
(, "".into())
+1 -1
View File
@@ -173,7 +173,7 @@ impl 线段特征 {
/// 新建特征序列元素
pub fn (线: Vec<Arc<线>>, 线: ) -> Self {
let = format!("特征<虚线>");
let = "特征<虚线>".to_string();
Self::new(, 线, 线)
}
+1
View File
@@ -92,6 +92,7 @@ impl 分型结构 {
)
}
#[allow(clippy::too_many_arguments)]
fn _内部(
: f64,
: f64,
+3 -3
View File
@@ -42,7 +42,7 @@ pub fn format_f64_g(value: f64) -> String {
let exp = abs.log10().floor() as i32;
// Python :g 科学计数法边界: exp < -4 或 exp >= p (=6)
if exp < -4 || exp >= 6 {
if !(-4..6).contains(&exp) {
let significand = value / 10_f64.powi(exp);
let s = format!("{:.5}", significand);
let s = s.trim_end_matches('0').trim_end_matches('.');
@@ -57,12 +57,12 @@ pub fn format_f64_g(value: f64) -> String {
}
let s = format!("{:.prec$}", value, prec = 6 - int_digits);
let s = s.trim_end_matches('0');
return s.trim_end_matches('.').to_string();
s.trim_end_matches('.').to_string()
} else {
let leading_zeros = (-exp) as usize;
let s = format!("{:.prec$}", value, prec = leading_zeros + 5);
let s = s.trim_end_matches('0');
return s.trim_end_matches('.').to_string();
s.trim_end_matches('.').to_string()
}
}