rust '字符串式'加法数('1+1'='11')[重复]

6jjcrrmo  于 2023-03-02  发布在  其他
关注(0)|答案(2)|浏览(157)
    • 此问题在此处已有答案**:

How to format output to a byte array with no_std and no allocator?(2个答案)
2天前关闭。
这篇文章是昨天编辑并提交审查的。
我正在为Rust OS做一个计算器操作系统。我把自己陷入了一个处理数学的深坑,但我不想重做我有两个号码(它们在技术上是f64,但永远不会有浮点),我需要添加Javascript样式(1 + "1" = 11)。这都是在#![no_std]环境中,所以我不能使用类似format!()的东西,甚至不能使用拥有的String,因为我没有分配器。
rust 不是JS,所以我不能1 + "1",显然+是一个二进制运算。
编辑:我最终使用了How to format output to a byte array with no_std and no allocator?中建议的arrayvec

pvcm50d1

pvcm50d11#

你可以将第一个数字乘以第二个数字的10的位数幂,如下所示:

fn concat(a: f64, b: f64) -> f64 {
    a * 10f64.powf(b.log10().floor() + 1.0) + b
}
3npbholx

3npbholx2#

将数字转换为整数,然后计算b除以10所需的次数,直到达到0,然后将a乘以10,计算相同的次数:

fn concat (a: f64, b: f64) -> f64 {
    let mut a = a as u64;
    let b = b as u64;
    let mut c = b;
    while c > 0 {
        a *= 10;
        c /= 10;
    }
    (a+b) as f64
}

Playground

相关问题