【问题标题】:Objective-C float being limited to 6 decimal places? [duplicate]Objective-C 浮点数限制为小数点后 6 位? [复制]
【发布时间】:2014-01-28 02:09:12
【问题描述】:

我有一个 Objective-C 项目需要显示像 0.00000217 这样的数字,以及像这样的非常小的数字。问题是,Objective-C 将其四舍五入到小数点后 6 位,因此它显示为 0.000002。有没有显示更多小数位的类型?我的代码:

float floatValueOfSmallNumber = [value floatValue];
[theLabel setText:[NSString stringWithFormat:@"%f", floatValueOfSmallNumber]];

谢谢!

【问题讨论】:

  • 这个信息可以通过谷歌快速搜索找到。例如,如果我搜索objective-c 数字类型,该页面上的第一个结果表明double 及其用途。 -1 明显缺乏研究工作。
  • 我寻找“仅浮点 6 位数字”,它不会返回任何结果。
  • 只尝试一次谷歌搜索而不包括编程语言(并不是说它在这里特别相关,但它会产生更好的结果)仍然值得“没有研究工作”的反对。
  • @Burrito411 我搜索了那个确切的短语,第二个结果提到了 doubles
  • 这个问题不是建议问题的重复;提问者的问题是他使用的格式说明符,而不是float 的精度。

标签: objective-c c


【解决方案1】:

虽然float 只有约 7 个有效十进制数字,但这不是您在这里遇到的问题;毕竟0.00000217 只有三位有效数字。

您正在使用从 C 继承并因此定义的 %f 格式说明符(7.21.6 格式化输入/输出函数):

表示浮点数的双精度参数以 [−]ddd.ddd 样式转换为十进制表示法,其中小数点字符后的位数等于精度规范。 如果精度缺失,则取6;如果精度为零且未指定 # 标志,则不出现小数点字符。如果出现小数点字符,则在其前面至少出现一位数字。该值被四舍五入到适当的位数。

使用double 不会改变这一点;相反,您需要更改格式说明符。如果您不介意科学记数法,可以使用 %e 或 %g,但另一种选择是使用精度说明符:例如,%.10f 将打印十进制数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多