Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何将浮点设置为第一个有效小数,并具有指定的精度_Rust - Fatal编程技术网

Rust 如何将浮点设置为第一个有效小数,并具有指定的精度

Rust 如何将浮点设置为第一个有效小数,并具有指定的精度,rust,Rust,我是个新手(来自Javascript背景),所以我决定构建一个数字格式化应用程序来了解更多信息 应用程序中的一个函数可以接受一个小浮点数(例如0.000435)和一个精度值(例如2),并应返回格式化为第一个有效小数且应用指定精度的浮点数(例如0.00044) 例如,函数应接受并返回以下内容: fn meh(float: f64, precision: usize) -> String { // ... magic happens ... format!(... } l

我是个新手(来自Javascript背景),所以我决定构建一个数字格式化应用程序来了解更多信息

应用程序中的一个函数可以接受一个小浮点数(例如
0.000435
)和一个精度值(例如
2
),并应返回格式化为第一个有效小数且应用指定精度的浮点数(例如
0.00044

例如,函数应接受并返回以下内容:

  fn meh(float: f64, precision: usize) -> String {
    // ... magic happens ... format!(...
  }

  let float = 0.000456;
  let precision = 2:
  let result_a = meh(float, precision);
  // result_a => "0.00046"

  let float = 0.043256;
  let precision = 3:
  let result_b = meh(float, precision);
  // result_b => "0.0433"
我知道
格式有助于提高精度。但是我找不到一个合适的方法来找到第一个有效的小数点,而不做一些有趣的事情,比如“将浮点转换为
字符串
并迭代直到找到一个非零值……”


我希望这是有意义的,任何帮助都将不胜感激。

如评论中所述,Rust对“精度”的解释是“小数点后的位数”。但是,如果我们希望它表示“有效位数”,我们可以编写
meh
函数来考虑这一点:

fn-meh(浮点:f64,精度:usize)->字符串{
//计算绝对值
设a=float.abs();
//如果abs值大于1,则精度小于“标准”
如果a>=1,则设精度为{
//减少位数,最小为0
设n=(1.+a.log10().floor())为usize;
如果n为0{
//增加位数
设n=-(1.+a.log10().floor())为usize;
精度+n
//0的特殊情况
}否则{
0
};
//具有给定计算精度的格式
格式!(“{0:.1$}”,浮点,精度)
}

作为输出的指数表示法是否足够?否则,使用“精度”标准含义会有所不同。不会有指数表示法。浮点数不会/不应该小到需要它。此外,我的目标是将浮点数的格式设置为显示给可能不希望/不理解指数表示法的最终用户。浮点数支持精度格式,但Rust的精度概念是“小数点后应打印多少位”,即
println!(“{.4}”,1.3333);
给出
1.3333
同意,这是我在问题中提到的关于我对
格式的理解!
以及它对我的情况有何帮助。这个问题的主体是我正在寻找一个可以找到第一个有效小数点的解决方案。谢谢。看起来缺少的部分是我对loga的理解rithms和
log10