【发布时间】:2020-08-20 19:02:53
【问题描述】:
我想在 C++ 中以可变精度对一小部分无符号整数进行字符串化。所以1/3 将使用precision 的2 打印为0.33。我知道float 和std::ostream::precision 可用于快速而肮脏的解决方案:
std::string stringifyFraction(unsigned numerator,
unsigned denominator,
unsigned precision)
{
std::stringstream output;
output.precision(precision);
output << static_cast<float>(numerator) / denominator;
return output.str();
}
但是,这还不够好,因为float 的精度有限,实际上不能准确地表示十进制数字。我还有什么其他选择?如果我想要 100 位左右的数字,或者是循环分数,即使是 double 也会失败。
【问题讨论】:
-
您的问题似乎不是转换为字符串,而是您想要一种表示有理数而又不损失精度的方法。问题的标题可能是您的最终目标,但这不是您的实际问题。
-
@FrançoisAndrieux 我不确定你是如何得出这个结论的。我已经有了一个无损表示:分子和分母。我发布此问答的原因是因为我经常遇到这个问题,例如将
uint8_tRGB 值打印到[0, 1]十进制范围内的文件中。或以字节为单位打印文件大小为x.yyy MB。
标签: c++ string math c++17 base