如何将分数值转换为字符串“原样”?
我有一个浮点值是这样的:0.60000002384185791 我想这个值转换为字符串是这样的:0.60000002384185791(完全一样 - 没有科学记数法或剪下精度)如何将分数值转换为字符串“原样”?
但每当我尝试转换这个值的字符串,它给了我“0.600000023841858”
代码:
Dim ddd As Decimal = 0.60000002384185791 '//This value is coming from some method and it may be different like 0.6000000238418579123456789012 or 102020.6000000238418579123456789012
Dim myVal as string = " Your Value is : " & ddd.ToString() '//This truncates actual value to 0.600000023841858
是否有任何方法可以将该值“按原样”转换(没有科学记号并且没有削减精度)?
它在C#中运行良好,但我需要Visual Basic中的解决方案。与语言有什么关系(我不希望)。
幽州的评论:
其实我的双保持该值。
我相信你正在寻找的是The Round-trip ("R") Format Specifier。
往返(“R”)格式说明符试图确保将转换为字符串的数值分析回相同的数值。该格式仅支持Single,Double和BigInteger类型。
对于Double和Single值,在某些情况下,“R”格式说明符 未能成功地将原始值往返并且还提供相对较差的性能 。相反,我们建议您为Double值使用 “G17”格式说明符,并使用“G9”格式说明符 成功往返Single值。
例子:
Dim ddd As Decimal = 0.60000002384185791D
Dim originalDouble As Double = ddd
Dim originalDoubleAsString As String = originalDouble.ToString("R")
Console.WriteLine(originalDoubleAsString)
Dim roundTripDouble As Double = Double.Parse(originalDoubleAsString)
Console.WriteLine("double round tripped correctly: {0}", (originalDouble = roundTripDouble))
输出:
0.60000002384185791
双轮正确跳闸:真
谢谢你的时间和支持。我已经将答复标记为答案,因为它为我提供了17位小数。 我们仍然有挑战,当小数持有精度是大于17个字符,那么这将无法正常工作,双重不能持有精度超过17个字符 像: DDD = 0.6000000238418579122233344456D =设为myVal DDD“这个拥有0.60000002384185791双而不是“实际”十进制 而且我们也不能写如下所示的东西,因为它不被支持: Dim engineeringValue as String = ddd.ToString(“R”)'“R”不是用于小数 –
添加d的号码,它是一个小数?可能会被视为浮点数并在编译时被截断 –
正如@SamiKuhmonen所说,您示例中的问题是您的常量'0.60000002384185791'是一个不能容纳这么多数字的Double。设置“Option Strict On”禁止自动转换,并确保您从“某些方法”获得的值永远不会转换为double。 – Blackwood
@SamiKuhmonen,@Blackwood: 我也这样做过,但没有运气。其实我的双'拥有这个价值。当我将鼠标悬停在它上面时,它显示出正确的值,即'0.60000002384185791'但是如果我将函数返回类型更改为'Decimal',它只会返回'06D'。 –