数据类型的转换

类型转换的方式

Rust 提供了多种类型转换的方式。

  • as T

    用于数类型之间的转换。ixx, uxx, fxx 都可以。

    注意:当溢出的时候,转换不会 panic,而是循环映射值。

fn as_type() {
// i32 -> i8
println!("{}", 127i32 as i8);
// output: 127
println!("{}", 128i32 as i8);
// output: -128 // f64 -> i32 (floor)
println!("{}", -10000.678f64 as i32);
// output: -10000 // integer divide
for i in 1..10 {
print!("{} ", i / 2);
}
// output: 0 1 1 2 2 3 3 4 4
println!(); // float divide
for i in 1..10 {
print!("{} ", i as f64 / 2.0);
}
// output: 0.5 1 1.5 2 2.5 3 3.5 4 4.5
println!();
}
  • TryFrom/TryInto

    可以在不同的数类型之间转换,越界时,会返回错误。

    TryFrom/TryInto 的结果是 Result<T, Error>
use std::convert::TryFrom;
use std::convert::TryInto; fn try_from_try_into() {
println!("{}", i8::try_from(32i32).unwrap());
// output: 32, panic if the value is not fit to i8.
let i_8: i8 = 32i32.try_into().unwrap();
println!("{}", i_8);
// output: 32, panic if the value is not fit to i8.
}
  • From/Into

    只能从小范围数类型变成大的数类型。安全。

    也可以用于 strString 之间的转换。
use std::convert::From;
use std::convert::Into; fn from_into() {
println!("{}", i32::from(127i8));
// output: 127
let i_32: i32 = 127i8.into();
println!("{}", i_32);
// output: 127
}
  • unsafe
// Cargo.toml
// [dependencies]
// rand = "0.8.3"
use rand::random; fn unsafe_f64() {
println!("{}", unsafe {
f64::to_int_unchecked::<usize>(random::<f64>() * 100.0)
});
// output: 67
}
  • to_string/parse

用于字符串和数类型之间转换

fn to_string_parse() {
// string -> float
let s = "123.456";
println!("{} ", s.parse::<f64>().unwrap());
// output: 123.456 // float -> string
let f_64 = 123.456;
println!("{} ", f_64.to_string());
// output: 123.456 // float -> string
let f_64 = 123.456;
println!("{} ", f_64.to_string());
// output: 123.456
}

在日期和字符串之间转换

// Cargo.toml
// [dependencies]
// chrono = "0.4"
use chrono::*; fn date_time() {
let locale = Local.ymd(2020, 12, 05).and_hms(12, 0, 9);
println!("{:?}", locale.format("%Y-%m-%d %H:%M:%S.%s").to_string());
// "2020-12-05 12:00:09.1607140809" println!("{:?}", locale.format("%a %b %e %T %Y").to_string());
// "Sat Dec 5 12:00:09 2020" println!("{:?}", locale.format("%c").to_string());
// "Sat Dec 5 12:00:09 2020" println!("{:?}", locale.to_string());
// "2020-12-05 12:00:09 +08:00" println!("{:?}", locale.to_rfc2822());
// "Sat, 05 Dec 2020 12:00:09 +0800" println!("{:?}", locale.to_rfc3339());
// "2020-12-05T12:00:09+08:00" let date_str = "2020-04-12 22:10:57";
let naive_datetime = NaiveDateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S").unwrap();
println!("{:?}", naive_datetime.to_string());
// "2020-04-12 22:10:57" let date_str = "2020-04-12 22:10:57 +02:00";
let datetime = DateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S %z").unwrap();
println!("{:?}", datetime.to_string());
// "2020-04-12 22:10:57 +02:00" let date_str = "2020-04-12";
let naive_date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d").unwrap();
println!("{:?}", naive_date.to_string());
// "2020-04-12" let time_str = "22:10:57";
let naive_time = NaiveTime::parse_from_str(time_str, "%H:%M:%S").unwrap();
println!("{:?}", naive_time.to_string());
// "22:10:57"
}

[Rust] 数据类型的转换的更多相关文章

  1. java中数据类型的转换

    数据类型的转换,分为自动转换和强制转换. 自动转换是程序执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换 强制转换必须在代码中声明,转换顺序不受限制 自动数据类 ...

  2. Java的基本数据类型与转换

    1.1 Java为什么需要保留基本数据类型 http://www.importnew.com/11915.html 基本数据类型对大多数业务相关或网络应用程序没有太大的用处,这些应用一般是采用客户端/ ...

  3. java的数据类型的转换

    一:java的数据类型转换除布尔类型boolean(不能转换)有两种:<一> 自动转换: <二> 强制转换 <一>.自动转换:就是将小的数据类型自动转换成大的数据类 ...

  4. JavaScript学习笔记——数据类型强制转换和隐式转换

    javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...

  5. JAVA数据类型自动转换,与强制转换

    一.数据类型自动转换 public class Test{ public static void main(String[] args){ int a = 1; double b = 1.5; dou ...

  6. Java学习笔记之:Java数据类型的转换

    一.介绍 数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换:强制类型转换则必须在代码中声明,转换顺序不受 ...

  7. 语言基础:C#输入输出与数据类型及其转换

    今天学习了C#的定义及特点,Visual Studio.Net的集成开发环境和C#语言基础. C#语言基础资料——输入输出与数据类型及其转换 函数的四要素:名称,输入,输出,加工 输出 Console ...

  8. C#基础(八)——C#数据类型的转换

    C#数据类型的转换主要有以下几种方式: 1.强制转换 注意:char类型不能强制转换成int,如果使用强制转化,得到的是原整数的ASCII码值. 2.class.parse(string类型的变量), ...

  9. php之数据类型自动转换

    1:概述 ---php是一种弱类型的语言,它可以根据运行环境的变化而自动进行数据类型的转换 1.1转换成布尔类型的原则 以下值都将转换成布尔类型中的false: A.布尔类型的false; B.空字符 ...

  10. Spark PySpark数据类型的转换原理—Writable Converter

    Spark目前支持三种开发语言:Scala.Java.Python,目前我们大量使用Python来开发Spark App(Spark 1.2开始支持使用Python开发Spark Streaming ...

随机推荐

  1. 银河麒麟系统信息获取V1.0版本

    银河麒麟系统信息获取 摘要 最近项目有一些兼容性测试需求. 可能需要获取一些系统配置信息便于相关的工作. 想着自己总结一下. 便于后续的不太熟悉的同事进行简要处理 银河麒麟获取版本 nkvers # ...

  2. [转贴]CPU设计全流程-以Alpha为例

    https://zhuanlan.zhihu.com/p/529872958 1.前言 作为一种超大规模集成电路,CPU在过去几十年里始终遵循摩尔定律--每过十八到二十四个月,硅片单位面积上晶体管数量 ...

  3. Linux 开启防火墙 避免非干系人误操作的处理

    公司里面进行系统集成测试. 不想让开发能够更改我的服务器信息, 但是改密码又太麻烦了. 想了想还是用 防火墙好一些. 第一步 开启防火墙 systemctl enable firewalld syst ...

  4. Gorm实战,轻松掌握数据库增删改查技巧!

    Gorm实战,轻松掌握数据库增删改查技巧! CRUD通常指数据库的增删改查操作,本文详细介绍了如何使用GORM实现创建.查询.更新和删除操作. 目录 Gorm实战,轻松掌握数据库增删改查技巧! 一.C ...

  5. DotLiquid(.net模版引擎)

    可用生成C#代码,在KSFramework中有使用:https://github.com/mr-kelly/KSFramework 主页:http://dotliquidmarkup.org/ 文档: ...

  6. 从零开始配置 vim(16)——启动界面配置

    不知道各位小伙伴用过 spacevim 或者 LunarVim 又或者 doomvim 或者其他的什么 vim 配置框架,我们发现他们的启动界面都做的比较好看,而我们默认进入的启动界面则显得比较素了. ...

  7. 使用Docker单机部署Ceph

    安装Docker过程参考:https://www.cnblogs.com/hackyo/p/9280042.html 1. 创建Ceph专用网络 sudo docker network create ...

  8. P4402 [Cerc2007] robotic sort 机械排序题解

    题目链接:[Cerc2007] robotic sort 机械排序 前置知识点:文艺平衡树 具体的我们会将序号下标作为平衡树的键值,这样一来每个节点其实就是数组中的每个位置,又因为这个位置是具有有序性 ...

  9. 在K8s中,提供的DNS组件是什么?有什么特性?

    在Kubernetes (K8s)集群中,用于内部DNS服务的组件已经从早期的kube-dns过渡到了coredns. kube-dns(已弃用): 在Kubernetes 1.10版本之前,kube ...

  10. 小知识:统计Oracle的日归档量

    首先这对于Oracle DBA来说是个初级问题,即使不熟悉的初级DBA也可以快速在网上搜索到现成的SQL语句. 网上搜到的查询SQL基本类似这样的逻辑: select trunc(completion ...