获得只有 3 位小数和 +/- 符号的往返 Double
Posted
技术标签:
【中文标题】获得只有 3 位小数和 +/- 符号的往返 Double【英文标题】:Get a Round-tripped Double with only 3 decimals and +/- symbol 【发布时间】:2013-06-11 23:05:50 【问题描述】:我需要根据某些条件将 Double 转换为 String:
我不想要一个四舍五入的值 逗号后只有 3 位数字 + 或 - 符号和开头。 (如果 double 值为 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 值是四舍五入的...... :(
我希望我已经清楚了。 :) 提前致谢。
再见!
【问题讨论】:
如果 quick&dirty 足够好:格式化 4 个小数点并用字符串操作去除最后一个数字 ... 【参考方案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));
这应该适用于正数和负数。
【讨论】:
对于我一直在搜索的内容,它 100% 有效! :) 非常感谢 !我当时认为可以使用 R 格式,但正如我所见,第一个操作是在 Double 上截断它。好主意,我没想到这一切! :)以上是关于获得只有 3 位小数和 +/- 符号的往返 Double的主要内容,如果未能解决你的问题,请参考以下文章