得到一个往返双倍,只有3位小数和+/-符号

时间:2013-06-11 23:05:50

标签: c# double string-formatting roundtrip

我需要将Double转换为符合某些条件的字符串:

  • 我不想要舍入值
  • 逗号后只有3位数
  • +或 - 符号和开头。
  • (额外:如果双值为0,则为0.000)(不是最重要的)

因此,如果我的Double值为0.257894214,我希望字符串为:+0.257

我测试了几行代码:

Double num = 0.257894214;
Double num2 = -0.257894214;
Double num3 = 0;

num.ToString("R")   // 0,257894214
num2.ToString("R")  // -0,257894214
num3.ToString("R")  // 0

String.Format("{0:0.000}",num)      // 0,258
String.Format("{0:0.000}",num2)     // -0,258
String.Format("{0:0.000}",num3)     // 0,000
num.ToString("0.000")               // 0,258
num2.ToString("0.000")              // -0,258
num3.ToString("0.000")              // 0,000

num.ToString("+0.000;-0.000;0.000")             // +0,258
num2.ToString("+0.000;-0.000;0.000")            // -0,258
num3.ToString("+0.000;-0.000;0.000")            // 0,000
String.Format("{0:+0.000;-0.000;0.000}",num)    // +0,258
String.Format("{0:+0.000;-0.000;0.000}",num2)   // -0,258
String.Format("{0:+0.000;-0.000;0.000}",num3)   // 0,000

我感觉接近解决方案,但我现在完全失去了!

最后一行非常接近我正在搜索的内容...但Double值是舍入的...... :(

我希望我已经清楚了。 :) 提前谢谢。

Au revoir!

1 个答案:

答案 0 :(得分:1)

如果我知道你发帖了,你所说的是你要截断小数点后三位而不是四舍五入。所以你得到的值是+0.257,-0.257和0.000

以下内容应该这样做:

首先定义一个函数

// truncates to 3 decimal places
static double Truncate(double num)
{
    return Math.Truncate(num * 1000) / 1000.0;
}

现在尝试

x = String.Format("{0:+0.000;-0.000;0.000}", Truncate(num));
y = String.Format("{0:+0.000;-0.000;0.000}", Truncate(num2));
z = String.Format("{0:+0.000;-0.000;0.000}", Truncate(num3));

这应该适用于正数和负数。