【问题标题】:string.format(format,doubleValue) , precision loststring.format(format,doubleValue) ,精度丢失
【发布时间】: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?

【问题讨论】:

    标签: c# double string.format double-precision


    【解决方案1】:

    您想使用R 格式说明符

    来自MSDN

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

    支持:Single、Double 和 BigInteger。

    精度说明符:忽略。

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

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

    会给你

    52.30298270000003 some text...
    

    【讨论】:

    • 啊,我需要更多关于stackoverflow的练习,你们很快:)!好东西,伙计。
    【解决方案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 :|编辑后的答案不会那么混乱。
    猜你喜欢
    • 2013-06-17
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多