C#双精度浮点数转换代码
时间: 2025-07-01 17:59:35 浏览: 4
### C# 双精度浮点数转换示例
以下是将双精度浮点数 (`double`) 转换为不同格式的 C# 示例代码:
#### 将 `double` 转换为字符串
可以使用 `.ToString()` 方法并指定不同的格式化选项。
```csharp
using System;
class Program
{
static void Main()
{
double value = 123.456789;
Console.WriteLine(value.ToString("F")); // 默认两位小数:123.46
Console.WriteLine(value.ToString("F5")); // 五位小数:123.45679
Console.WriteLine(value.ToString("E")); // 科学计数法:1.234568E+002
Console.WriteLine(value.ToString("N")); // 带千分符:123.46
Console.WriteLine(value.ToString("P")); // 百分数形式(假设值为比例):12,345.68%
}
}
```
此代码展示了如何通过不同的格式说明符控制输出的小数位数、科学计数法以及百分比等形式[^1]。
#### 使用自定义格式化器
如果需要更复杂的格式,可以通过实现 `IFormatProvider` 接口来自定义格式化逻辑。
```csharp
using System;
public class CustomFormatter : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
return this;
else
return null;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
if (!(arg is double))
throw new ArgumentException("Only works with doubles.");
var d = (double)arg;
return $"[{d:F}]"; // 自定义括号包裹
}
}
class Program
{
static void Main()
{
double value = 123.456789;
var formatter = new CustomFormatter();
Console.WriteLine(value.ToString("X", formatter)); // 输出 [123.46]
}
}
```
这段代码演示了如何创建一个自定义格式提供程序,并将其应用于 `double` 类型的数据[^2]。
#### 将 `double` 转换为其二进制表示
类似于 Scala 中的操作,在 C# 中也可以获取 `double` 的内部二进制表示。
```csharp
using System;
class Program
{
static void Main()
{
double value = 123.456789;
long bits = BitConverter.DoubleToInt64Bits(value);
Console.WriteLine(Convert.ToString(bits, 2).PadLeft(64, '0')); // 打印完整的 64 位二进制串
}
}
```
该方法利用了 `BitConverter.DoubleToInt64Bits` 函数提取 `double` 的原始比特模式,并进一步将其转化为可读的二进制字符串[^4]。
---
### 注意事项
当处理浮点数时需要注意其固有的精度损失问题。即使在转换过程中未显式修改数值,也可能因为底层存储机制而导致微小差异。例如,某些十进制小数无法被精确表示为二进制浮点数,这可能导致意外的行为或结果[^3]。
---
阅读全文
相关推荐


















