我需要在十进制逗号后截断2个十进制数字。 我在C ++中使用以下代码:
auto doubleTmp = value * 100.00;
int64_t tmp = static_cast<int64_t>(doubleTmp);
double res = ( static_cast<double>(tmp) ) /100.00;
但是例如当我将值设置为70.82时,doubleTmp为70.8199999且结果为70.81。有什么更好的方法?为什么?
答案 0 :(得分:2)
问题是输入value
或结果res
在计算机内存中都无法正确表示70.82。正如@MatthieuBrucher所建议的那样,您应该使用std::lround
;考虑以下代码:
auto value = 70.82;
std::cout << std::fixed << std::setprecision(20) << value << std::endl;
auto tmp = std::lround(value * 100.0);
std::cout << tmp << std::endl;
double res = static_cast<double>(tmp) / 100.00;
std::cout << std::fixed << std::setprecision(20) << res << std::endl;
哪个给出以下输出:
70.81999999999999317879
7082
70.81999999999999317879
但是,您可以将结果存储为一对整数,其中第一个代表整数部分,第二个代表小数部分:
auto res_integral = tmp / 100;
auto res_fractional = tmp % 100;
std::cout << res_integral << "." << res_fractional << std::endl;
或者,只要知道您存储的是 100 * x 而不是 x ,就可以将其存储为tmp
。