std :: string to float(通过std :: stof)精度

Pee*_*eeS 4 c++ floating-accuracy

我试图解决这个问题,市场数据将货币值返回为数字长度后8位的字符串.

money = "124.19000540"
Run Code Online (Sandbox Code Playgroud)

我需要这个是124.19,任何想法如何实现这一点?

std::stof(money) = 124.19000244
Run Code Online (Sandbox Code Playgroud)

怎么克服这个?

bre*_*s10 5

浮点类型不利于持有货币价值.如果你满足于四舍五入,并将钱存储为整数分钱(这是最简单的解决方案之一),你可以这样做:

long numCents = static_cast<long>(100 * std::stof(money))
Run Code Online (Sandbox Code Playgroud)

这将"截断"舍入,这总是向下舍入.如果您想要"舍入到最近的分数",请尝试:

long numCents = static_cast<long>(100 * std::stof(money) + 0.5)
Run Code Online (Sandbox Code Playgroud)

正如其他人提到的,你可能想要一个固定点或十进制库而不是这么简单的东西.