---
title: Cast（float转half/int32_t）
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendcopapi/atlasascendc_api_07_0018.html
sourcePath: /source/zh/canncommercial/900/API/ascendcopapi/atlasascendc_api_07_0018.html
indexId: 9cdfa4126710b0117cb7bdd0c2d29a96842e7248c41167742b66ff1580dc8c2376
---
# Cast（float转half/int32_t）

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | x |
| Atlas 推理系列产品 AI Core | √ |
| Atlas 推理系列产品 Vector Core | x |
| Atlas 训练系列产品 | x |


#### 功能说明

对标量的数据类型进行转换。


#### 函数原型

```
template <typename T, typename U, RoundMode roundMode>
__aicore__ inline U Cast(T valueIn)
```


#### 参数说明


**表1 模板参数说明**

| 参数名 | 描述 |  |  |
| --- | --- | --- | --- |
| T | valueIn的数据类型，支持float。 |  |  |
| U | 转换后的数据类型，支持half、int32\_t。 |  |  |
| roundMode | 精度转换处理模式，类型是RoundMode。 RoundMode为枚举类型，用以控制精度转换处理模式，具体定义为： 1 2 3 4 5 6 7 8 9 enum class RoundMode { CAST\_NONE = 0, // 在转换有精度损失时表示CAST\_RINT模式，不涉及精度损失时表示不取整 CAST\_RINT, // rint，四舍六入五成双取整 CAST\_FLOOR, // floor，向负无穷取整 CAST\_CEIL, // ceil，向正无穷取整 CAST\_ROUND, // round，四舍五入取整 CAST\_TRUNC, // trunc，向零取整 CAST\_ODD, // Von Neumann rounding，最近邻奇数舍入 }; 对于Cast，转换类型仅支持float转half(f322f16)与float转int32\_t(f322s32)，相应支持的RoundMode如下： f322f16：CAST\_ODD； f322s32：CAST\_ROUND、CAST\_CEIL、CAST\_FLOOR、CAST\_RINT。 Cast的精度转换规则具体可参考表1。 | 1 2 3 4 5 6 7 8 9 | enum class RoundMode { CAST\_NONE = 0, // 在转换有精度损失时表示CAST\_RINT模式，不涉及精度损失时表示不取整 CAST\_RINT, // rint，四舍六入五成双取整 CAST\_FLOOR, // floor，向负无穷取整 CAST\_CEIL, // ceil，向正无穷取整 CAST\_ROUND, // round，四舍五入取整 CAST\_TRUNC, // trunc，向零取整 CAST\_ODD, // Von Neumann rounding，最近邻奇数舍入 }; |
| 1 2 3 4 5 6 7 8 9 | enum class RoundMode { CAST\_NONE = 0, // 在转换有精度损失时表示CAST\_RINT模式，不涉及精度损失时表示不取整 CAST\_RINT, // rint，四舍六入五成双取整 CAST\_FLOOR, // floor，向负无穷取整 CAST\_CEIL, // ceil，向正无穷取整 CAST\_ROUND, // round，四舍五入取整 CAST\_TRUNC, // trunc，向零取整 CAST\_ODD, // Von Neumann rounding，最近邻奇数舍入 }; |  |  |


**表2 参数说明**

| 参数名 | 输入/输出 | 描述 |
| --- | --- | --- |
| valueIn | 输入 | 被转换数据类型的标量。 |


#### 返回值说明

U类型的valueIn。


#### 约束说明

无


#### 调用示例

```
float valueIn = 2.5;
// 输出数据valueOut：3， 2.5向上取整为3
int32_t valueOut = AscendC::Cast<float, int32_t, AscendC::RoundMode::CAST_ROUND>(valueIn);
```
