数据类型的转换

类型转换的方式

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. [转帖]【JVM】常用虚拟机参数及实例

    常用参数表 参数 描述 -XX:+PrintGC 启动java虚拟机后,只要遇到gc,就打印日志 -XX:+PrintGCDetails gc发生时,打印更详细的日志 -XX:+PrintHeapAt ...

  2. [转帖]多CPU && 多核CPU | 多进程 && 多线程 | 并行 && 并发

    https://cloud.tencent.com/developer/article/1886157?areaSource=&traceId=   文章目录 区分 多CPU &&am ...

  3. CS231N Assignment1 softmax 笔记

    -为Softmax分类器实现完全矢量化的损失函数 -实现解析梯度完全矢量化的表达式 使用数值梯度检查实现结果 使用验证集调整学习率和正则化强度 使用SGD优化损失函数 可视化最终学习的权重 softm ...

  4. 插件时间格式处理moment如何使用

    第1步下载插件 cnpm i moment -S 第2步 在main.js中去使用 在main.js中 注册全局过滤器 fmtdata是等会你用的 可以自定义 fmtdata直接可以调用.是一个过滤器 ...

  5. 兄弟组件互相传递值-this.$bus.$emit与this.$bus.$on

    B组件向C组件传递一个值. 一种组件间通信的方式, 适用于任意的组件间通信. 适用于任意的组件间通信. 适用于任意的组件间通信. 通过this.$bus.$emit('事件名',数据)进行提供数据 通 ...

  6. 【主流技术】聊一聊对 Mybatis Plus 的理解与应用

    前言 mybatis plus是一个mybatis的增强工具,在其基础上只做增强不做改变.作为开发中常见的第三方组件,学习并应用在项目中可以节省开发时间,提高开发效率. 官方文档地址:MyBatis- ...

  7. 最新版Emlog采集发布插件-免费下载

    推荐一款可以自动采集网页文章数据,并发布到Emlog网站的Emlog采集发布插件(兼容最新的Emlog Pro版本,也兼容之前的 Emlog 5.3 和 Emlog 6.0 版本),支持对接简数采集器 ...

  8. 单片机 IAP 功能基础开发篇之APP升级(二)

    1.前言 上一篇单片机 IAP 功能基础开发篇之APP升级(一)讲到了单片机 IAP 功能给 APP 程序升级的设计思路,这篇介绍的是具体实现方式. 下一篇单片机 IAP 功能基础开发篇之APP升级( ...

  9. 小知识:Oracle RAC添加服务名实现单节点访问

    环境:Oracle 11.2.0.4 RAC(2 nodes) 1.查看RAC IP配置信息 2.添加服务名并启动服务 3.停止服务并删除服务名 1.查看RAC IP配置信息 我们先查看下环境的IP分 ...

  10. 深入浅出 testing-library

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 本文作者:佳岚 The more your tests resemb ...