string.format(format,doubleValue) ,精度丢失

Posted

技术标签:

【中文标题】string.format(format,doubleValue) ,精度丢失【英文标题】:string.format(format,doubleValue) , precision lost 【发布时间】:2013-05-09 13:36:27 【问题描述】:

我有这个double 值:

var value = 52.30298270000003

当我将其转换为string 时,它会失去其精度

var str = string.Format("0 some text...", value);
Console.WriteLine(str); // output: 52.3029827

我的double 值上的precision 数可能会在运行时更改。如何强制string.Format 方法使用所有precision

【问题讨论】:

【参考方案1】:

您想使用R 格式说明符

来自MSDN

结果:可以往返到相同数字的字符串。

支持:Single、Double 和 BigInteger。

精度说明符:忽略。

更多信息:The Round-trip ("R") Format Specifier。

String.Format("0:R some text...", value)

会给你

52.30298270000003 some text...

【讨论】:

啊,我需要更多关于***的练习,你们很快:)!好东西,伙计。【参考方案2】:

试试这个:

var value = 52.30298270000003;

var str = string.Format("0 some text...", value.ToString("R"));
Console.WriteLine(str); // output: 52.3029827

MSDN 文档中关于 Singles 和 Doubles 的 ToString 方法以及使用 ToString("R") 的内容如下:

默认情况下,返回值只包含7位精度 尽管内部维护了最多 9 位数字。如果值 此实例的位数大于 7 位,ToString(String) 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol 而不是 预期数量。如果您需要更高的精度,请指定格式 “G9”格式规范,它总是返回 9 位 精度或“R”,如果数字可以返回 7 位数字 如果数字只能是,则以该精度或 9 位表示 以最高精度表示。

【讨论】:

双人怎么可能是单身? 当你说“一个双人基本上是一个单身”时,你到底是什么意思? 对不起,我的意思是float和single,然后改成double :|编辑后的答案不会那么混乱。

以上是关于string.format(format,doubleValue) ,精度丢失的主要内容,如果未能解决你的问题,请参考以下文章

string.format()的用法?

string.format(format,doubleValue) ,精度丢失

string.format的参数

string.format用法

String.format 方法小数问题

聊聊String.format()方法