数据类型的转换

类型转换的方式

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. Linux部分参数的学习

    Linux部分参数的学习 简介 之前总结过很多Nginx或者是部署软件时的一些注意事项. 但是感觉对linux系统参数部分掌握的不是很好. 今天周末想着整理一下,作为备忘. limits.conf i ...

  2. 据说这道Go面试题90%的人都搞错了!

    [Go面试向]defer与time.sleep初探 大家好,我是阳哥,这是我们Go就业训练营小伙伴 寸铁同学 整理的一道很有意思的面试题. 知其然更要知其所以然,通过断点调试的思路带你搞清楚来龙去脉. ...

  3. 【团队效率提升】Python-PyWebIO介绍

    作者:京东零售 关键 Q&A快速了解PyWebIO Q:首先,什么是PyWebIO? A:PyWebIO提供了一系列命令式的交互函数,能够让咱们用只用Python就可以编写 Web 应用, 不 ...

  4. 巧用GenericObjectPool创建自定义对象池

    作者:京东物流 高圆庆 1 前言 通常一个对象创建.销毁非常耗时的时候,我们不会频繁的创建和销毁它,而是考虑复用.复用对象的一种做法就是对象池,将创建好的对象放入池中维护起来,下次再用的时候直接拿池中 ...

  5. 你不知道的<input type="file">的小秘密

    限制file上传类型 很多时候,我们都需要使用 <input type="file"> 进行文件上传. 在上传的时候,我们需要对文件类型进行限制. 如果上传图片的时候. ...

  6. 一个思路:实现 golang 中的 `__file__` `__line__` 宏

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 测试 zaplog 发现,开启 caller 的调用,会使 ...

  7. JS ----- JS实用小功能

    1.复制页面上文字功能 function copyIdCode() { var idcode = document.getElementById("personIdcodeCopy" ...

  8. Gorm 应用开发时区问题与unique唯一索引字段数据冲突问题

    目录 一.定义表模型时区问题 1.1 time.Time 与int64 1.2 优势 二.unique唯一索引字段数据冲突问题 一.定义表模型时区问题 1.1 time.Time 与int64 一般情 ...

  9. 使用 NuGet.Server 创建和部署 ASP.NET Web 应用程序搭建私有Nuget服务器

    使用 NuGet.Server 创建和部署 ASP.NET Web 应用程序搭建私有Nuget服务器 在Visual Studio中,选择"新建>文件>"Project ...

  10. ansible使用,搭建mongo的replica-set小结

    ansible 前言 常用到的指令 查看ip是否可用 执行 执行,查看日志输出 查看这个 playbook 的执行会影响到哪些 hosts 设置服务器免密登录 ansible了解 变量名的使用 pla ...