为什么浮点的字符串格式不等效,为什么“N9”产生不同的值?

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

我想了解这段代码是怎么回事:

float flt = 0.123F;

string s1 = flt.ToString("0.#########"), // "0.123"
    s2 = flt.ToString("N9"); // "0.123000003"

其中调试器中

flt
的值为
0.123
:

enter image description here

有关“#”自定义数字格式说明符的文档指出:

如果正在格式化的值的位置有一个数字 “#”符号出现在格式字符串中,该数字将被复制到 结果字符串。否则,该位置不会存储任何内容 结果字符串。

关于

带有精度说明符的标准数字格式的文档没有解释为什么它在末尾添加 000003

    为什么这两种格式不等效?
  1. 为什么“标准”格式将
  2. 000003
     添加到只有 
    0.123
     的变量末尾?
c# .net string-formatting .net-8.0
1个回答
0
投票
浮点数不存储精确值。 访问 IEEE 浮点转换器

here,您会发现值 0.123F

 实际上存储为 
0.123000003397464752197265625

浮点是一种以二进制格式存储“近似”值的方法。 .NET 支持单精度和双精度浮点数。 双精度格式占用的存储空间是单精度格式的两倍,但仍然存储近似值。

Floating point format for 0.123F

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.