> Source: https://ashareapi.com/wiki/string-numbers/  ·  Markdown version for LLMs / AI agents

参考

# 字符串数值
 行情、指标、财务这些端点的数值是字符串（"1723.50"），不是数字。直接做算术、比较或排序会出问题 —— 转换前先确认类型。

## 一句话

 **大部分端点的数值是字符串**（`"1723.50"`），**只有 orderbook 和 snapshot 是原生数字**。


## 哪些端点是字符串

 实测结果（2026-10-07，逐个端点打印字段类型）：

 
 | 

| 
 | 端点 
 | 数值字段的类型 




 

| 
 | `quote` · `kline` · `minute` · `hot` · `technical` · `chip` · `profile` · `search` · `ipo` · `dividend` · `block-trade` · `margin-trade` 
 | **字符串** 



| 
 | `fund` 
 | **字符串**（`main_net`、`main_rank`、`close` 等） 



| 
 | `orderbook` · `snapshot` 
 | **原生数字**（`price`、`high`、`low` 等是 float/int） 



| 
 | 文本型端点（`sector`、`lhb`、`screen` …） 
 | 值在 markdown 里，取 `structured` / `tables` 后仍是**字符串** 






 ⚠️ **别按端点名猜** —— 同一个字段名在不同端点类型可能不同。`orderbook` 的 `price` 是数字，`quote` 的 `last` 是字符串。


## 为什么是字符串

 源数据本身以文本形态给出（上游按文本返回、且部分字段可能为空串或带单位空格）。**统一保持字符串可以避免“有的行是数字、有的行是 None 或 "" “这种更麻烦的混合类型**。


## 怎么安全转换

```
def num(v, default=None):
 """把可能为字符串/空/None 的数值安全转成 float"""
 if v is None:
 return default
 s = str(v).strip().replace(",", "")
 if not s:
 return default
 try:
 return float(s)
 except ValueError:
 return default

rows = resp["data"]
rows.sort(key=lambda r: num(r["amount"]) or 0, reverse=True)
```
 三个要点：**先 strip()**（可能有空格）、**去掉千分位逗号**、**空串要兜底**（否则 `float("")` 抛异常）。


## 常见误用

 

- **直接相加** —— `"10" + "20"` 得到 `"1020"`（字符串拼接），不是 30。


- **直接比较大小** —— 字符串按字典序比：`"9" > "10"` 为真，但数值上 9 < 10。**排序会整体乱掉**。


- **没兜底就 float()** —— 空串或非数值字段会抛 `ValueError`，把正常流程打断。


- **sort 不转类型** —— 对字符串排序得到的是字典序，不是按价格/成交额排。


- **按端点名猜类型** —— `snapshot` 是数字而 `quote` 是字符串，猜必错。




 最后更新: 2026-10-07
 逐端点实测（2026-10-07，数据层直调后打印每个字段的 Python 类型）：quote / technical / chip / ipo / dividend / profile / fund 的数值字段全部为字符串；orderbook / snapshot 为原生数字。

 接着看

-
[K 线返回字段速查](/wiki/kline-fields)

-
[单位速查](/wiki/units)

 [← 全部 Wiki](/wiki)
