如何将分数值转换为字符串“原样”?

问题描述:

我有一个浮点值是这样的: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中的解决方案。与语言有什么关系(我不希望)。

+0

添加d的号码,它是一个小数?可能会被视为浮点数并在编译时被截断 –

+1

正如@SamiKuhmonen所说,您示例中的问题是您的常量'0.60000002384185791'是一个不能容纳这么多数字的Double。设置“Option Strict On”禁止自动转换,并确保您从“某些方法”获得的值永远不会转换为double。 – Blackwood

+0

@SamiKuhmonen,@Blackwood: 我也这样做过,但没有运气。其实我的双'拥有这个价值。当我将鼠标悬停在它上面时,它显示出正确的值,即'0.60000002384185791'但是如果我将函数返回类型更改为'Decimal',它只会返回'06D'。 –

幽州的评论:

其实我的双保持该值。

我相信你正在寻找的是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

双轮正确跳闸:真

+0

谢谢你的时间和支持。我已经将答复标记为答案,因为它为我提供了17位小数。 我们仍然有挑战,当小数持有精度是大于17个字符,那么这将无法正常工作,双重不能持有精度超过17个字符 像: DDD = 0.6000000238418579122233344456D =设为myVal DDD“这个拥有0.60000002384185791双而不是“实际”十进制 而且我们也不能写如下所示的东西,因为它不被支持: Dim engineeringValue as String = ddd.ToString(“R”)'“R”不是用于小数 –