c 中的 fscanf 如何使用 %lf 只保留两位小数?我试过 %.2lf 但它不起作用 [关闭]

问题描述 投票:0回答:1

我一直在尝试取双精度值 1200.00 而不是 1200.00000000,这个值需要放到另一个文件中。但是我做不到

我尝试在我的代码中使用

%.2lf
,例如:

fscanf(file, "%.2lf", &items[i].cost);

但是我得到一个错误

c decimal scanf
1个回答
1
投票

转换规范

"%.2lf"
对于标准C或POSIX中的
fscanf()
无效-点不是可以出现在
fscanf()
转换规范中的字符之一:

每个转换规范由字符'

%
'[CX]⌦或字符序列“
%n$
”,⌫引入,之后依次出现:

  • 一个可选的赋值抑制字符'*'。

  • 指定最大字段宽度的可选非零十进制整数。

  • [CX] ⌦ 一个可选的分配分配字符“m”。 ⌫

  • 一个选项长度修饰符,指定接收对象的大小。

  • 一个转换说明符,指定要应用的转换类型。有效的转换说明符如下所述。

你没有显示你检查过你对

fscanf()
的调用是否成功——如果成功,它应该返回
1
。阅读不受字段宽度(要阅读的最大字符数)的限制,除非您的图书馆将
.2
解释为等同于
2
(有效地忽略点)。没有办法将读取的数据限制为小数点后 2 位——除非输入数据是带前导零的固定宽度,这样使用
%7lf
将跳过空格并读取 7 个字符作为数字 (
1200.00
) ,留下任何其他的输入操作来处理。请记住,
%a
%e
%f
%g
转换是可以互换的;它们都识别固定格式、指数格式或十六进制格式的浮点输入字符串。

您还没有解释如何获得输出值

1200.00000000
。这通常是因为您指定了
fprintf()
转换规范,例如
%14.8f
,它在小数点后打印 8 个字符。

所以:

  1. 检查
    fscanf()
    的返回值。
  2. 显示您如何打印数据。
© www.soinside.com 2019 - 2024. All rights reserved.