gpt4 book ai didi

c++ - 整数的模数

转载 作者:行者123 更新时间:2023-11-30 00:53:34 24 4
gpt4 key购买 nike

我正在编写一个程序,从输入中获取美元金额并以文字显示金额。此时无法使用字符串、数组或函数,所以我用开关结构解决了这个问题,尽管它不是很有效。

然而,当我将输入从 float 转换为整数,并尝试使用模数挑出小数点后的数字时,我的问题就来了;由于某种原因,它没有返回正确的数字。

所以说 321.78提取第一位小数(或 8)它返回 7。我不太清楚为什么会发生这种情况,以及如何修复它。

这是第一部分的代码

float number;
int digit1, digit2, digit3, decimals, decimal1, decimal2, int_number;

cout << "Enter a dollar amount from 0-1000: ";
cin >> number;

int_number = number * 100;

digit1 = (int_number % 1000)/100; //ones
digit2 = (int_number % 10000)/1000; //tens
digit3 = (int_number % 100000)/10000; // hundreds

decimal1 = int_number % 10;
decimal2 = (int_number % 100)/10;

如果输入为 321.78,小数 1 应返回 8。我错过了什么吗?任何帮助将不胜感激。

最佳答案

首先请收藏What Every Computer Scientist Should Know About Floating-Point Arithmetic .

您的问题与浮点精度有关。尝试以下简单示例:

#include <iostream>

int main()
{
float f;
std::cin >> f;
int x = f * 100;
std::cout << x;
}

您会看到 x 的值为 32177。这是因为浮点类型只有一定的精度。 float 可以具有的最接近 321.78 的可表示值是 321.779998779296875。如您所见,这略小于 321.78。当您将其乘以 100 时,您得到的值比 32178 小一点,当转换为 int 时,它的值为 32177

这里的问题实际上是您要求用户提供一个 float 值。由于您直接提取到 float 中,因此您对用户施加了限制,即他们只能输入由 float 表示的值。显然这是非常愚蠢的,因为您最终只是将该值转换为 int。想象一下 ATM 是这样做的!会有很多便士丢失。相反,此处正确的方法是将输入作为字符串读取并解析为适当的 int 值。

关于c++ - 整数的模数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com