mhe*_*man 12 c# decimal type-conversion
如果我想要一个转换双为字符串,然后返回到双匹配正好,我会使用类似:
double d1 = 1 / 3.0;
string s = d1.ToString("R");
double d2 = double.Parse(s);
Run Code Online (Sandbox Code Playgroud)
但是,"R"格式没有为十进制类型定义(您得到"FormatException:格式说明符无效").
生成十进制类型的往返字符串的方法是什么?
Decimal实际上是一个二进制十进制值(它使用10为底,而不是2 )Double,这就是为什么不需要像 ; 这样的特殊精确表示ToString("R")。
Decimal value = 123.456m;
String result = value.ToString(CultureInfo.InvariantCulture); // <- That's enough
Run Code Online (Sandbox Code Playgroud)
详细信息另请参阅:
http://csharpindepth.com/articles/general/decimal.aspx
编辑:从.Net 7开始,您可以使用INumber接口创建通用(甚至decimal是double异国情调Half)扩展方法(请参阅下面的 SandRock 评论):
using System.Globalization;
using System.Numerics;
...
public static class MyNumberExtensions {
public static string ToInvariantString<T>(this T value)
where T : INumber<T>, IFormattable {
return value.ToString("R", CultureInfo.InvariantCulture);
}
}
Run Code Online (Sandbox Code Playgroud)
然后
double d = 123.45;
decimal de = 446.93m;
int i = 456;
Half h = (Half)(5.1);
Console.WriteLine(string.Join(Environment.NewLine,
d.ToInvariantString(),
de.ToInvariantString(),
i.ToInvariantString(),
h.ToInvariantString()));
Run Code Online (Sandbox Code Playgroud)
输出:
123.45
446.93
456
5.1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1428 次 |
| 最近记录: |