我必须计算一些百分比,但我必须避免在 Rust 中使用浮点数。
我有这个数据结构
let data = Vec<Identity, u64>
由此我可以将所有 u64 相加得到总成熟度,我们将其称为总成熟度
let total_maturity = data.iter().map(|(,b)| b).sum()
所以现在我对所有这些都完全成熟了。获得每个神经元的成熟百分比应该是相当简单的,但我如何表达这一点。
使用浮点数会很简单,与神经元相关的百分比向量结果将类似于 [0.3, 0.4, 0.1 ....]
我听说过使用整数数学,但我不确定它到底是如何工作的。
您只需将所有数字乘以 100,然后再进行除法即可。
let data: Vec<u64> = vec![3, 4, 1, 2];
let total_maturity: u64 = data.iter().sum();
let percentages: Vec<u64> = data
.iter()
.map(|b| b * 100 / total_maturity)
.collect();
println!("{:?}", percentages);
// [30, 40, 10, 20]
如果需要更高的精度,可以乘以更大的数字。请记住,如果您需要显示小数点或对它们进行数学运算,则需要重新引入小数点。
let data: Vec<u64> = vec![3, 4, 1, 9992];
let total_maturity: u64 = data.iter().sum();
let percentages: Vec<u64> = data
.iter()
.map(|b| b * 10_000 / total_maturity)
.collect();
let formatted: Vec<String> = percentages
.iter()
.map(|&p| {
let whole = p / 100;
let frac = p % 100;
format!("{whole}.{frac:.02}%")
// or you could convert them to floats
// format!("{}", p as f32 / 100.0)
})
.collect();
println!("{:?}", formatted);
// ["0.3%", "0.4%", "0.1%", "99.92%"]
如果您想要更灵活的东西,可以使用 rust_decimal crate。