c++ - 如何将 C++ 中的浮点数截断为 2 位小数?
问题描述
我不知道如何让这个函数返回float
两位小数。
float calcPrice(float a, float b, string x) {
if (x == "X") return (a - b) * 7.5;
else return (a - b) * 9.75;
}
解决方案
你不能“截断”一个浮点数。浮点数没有“小数位”之类的东西。您在代码中输入的内容只是为了方便,浮点数的二进制表示完全不同:https ://en.wikipedia.org/wiki/Single-precision_floating-point_format
如果您想以任何方式显示浮点数,您仍然可以使用 printf 等函数对其进行格式化(请记住,它是格式化后的字符串,而不是浮点数)。
printf("%.2f", foobar); // prints out foobar with 2 digits
还建议不要使用浮点数进行货币计算。由于尺寸小,浮点数变得不精确(即使双精度和其他浮点格式最终会耗尽精度)。更不用说浮点数容易出现舍入错误(同样是由于它们的大小有限)。这些错误累积得很快。
对于货币计算,您可以使用定点数学。使用定点数学,您确实有固定的小数位数,并且实现类似于基本整数数学。你只需要照顾好携带。
有关定点数学的更多信息,请参见此处: C 编程中的定点算术
推荐阅读
- apache-spark - 如何从 Arrow IPC 流格式文件创建火花数据框?
- c++ - 为什么 QSqlError 参数计数不匹配?
- c++ - 如何使用jenkins构建32位和64位程序并封装在一个包中
- javascript - 捕获错误Angular 2后如何继续请求
- list - 将两个列表的对应元素相加,将较长列表的额外元素添加到末尾
- flutter - Flutter Firestore 在页面加载之前设置数据
- code-coverage - Veracode 作为 git 的预提交钩子
- amazon-web-services - 由 memcached 支持的 AWS Elasticache CPU 使用率持平为 1%
- python - django 管理组和查询集
- windows - Tomcat 更新安装正在更改 Windows 文件夹权限