gpt4 book ai didi

c - 如何将 double 转换为 unsigned 货币?

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:22 25 4
gpt4 key购买 nike

我知道 double 的准确性存在问题,但这种情况让我感到惊讶。

我从文件中读取了一些 double 。这些是值:

90.720000 33.800000 43.150000 37.970000 46.810000 48.770000 81.800000 19.360000 6.760000

由于它们代表货币,因此它们始终具有最多 2 位小数的精度。我希望将这些值存储为无符号值。因此,我将它们全部乘以 100.0,并将它们转换为无符号数组。

当我打印无符号值时,我得到了这个:

9071 3379 4314 3796 4681 4877 8179 1935 675

为什么这些数字有的有错误有的没有?还有另一种解决方法吗?为什么代码会告诉我它的值为 90.72,如果它真的有 90.71?

根据要求,这里是相关代码:

unsigned itemprices[MAXITEMS];
unsigned u_itemweights[MAXITEMS];
double itemweights[MAXITEMS];

numberofobjects=0;
do{
fscanf(fp, " (%*u,%lf,$%u)", &itemweights[numberofobjects], &itemprices[numberofobjects]);
numberofobjects++;
if(fgetc(fp)==' ') continue;
else break;
}while(1);

puts("\nitemweights before convert:");
for(i=0; i<numberofobjects; i++) printf("%f ", itemweights[i]);

// convert itemweights to unsigned.
for(i=0; i<numberofobjects; i++) u_itemweights[i] = itemweights[i] * 100.0;

puts("\nitemweights after convert:");
for(i=0; i<numberofobjects; i++) printf("%u ", u_itemweights[i]);

这是一个输出示例:

itemweights before convert:
90.720000 33.800000 43.150000 37.970000 46.810000 48.770000 81.800000 19.360000 6.760000
itemweights after convert:
9071 3379 4314 3796 4681 4877 8179 1935 675

最佳答案

实际值为 90.719999999999998863131622783839702606201171875。如果乘以 100,则结果为 9071.9999999999998863131622783839702606201171875,转换为整数后为 9071

示例:http://ideone.com/QQ7Ddm

在将乘法转换为整数之前,您可以将 0.5(或任何其他小于 1 的小数)加到乘法结果中。

另一种选择是使用 round 函数。

关于c - 如何将 double 转换为 unsigned 货币?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33266709/

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