【求助】ToString方法不显示为科学计算法???????

时间:2021-08-09 10:45:11
程序里封装了一个字段,object类型,
这个object类型字段是通过(int、float、double等数值类型)装箱得到。
现在我需要将object.tostring()
现在的问题就是,如果数据比较大的话,会把数据显示成科学计算法显示。
如果处理才能原封不动的tostring呢?包括总的位数还有小数点位数。。。

28 个解决方案

#1


是不是在装箱之前就以经变成科学计数法了?

如果之前有转换的话,把Convert.ToDouble换成Convert.ToDecimal试试

#2


装箱之前的代码我无从改,
我现在只能通过typeof这个object变量,然后根据类型再去还原最原始的值,
现在的问题就是我不需要显示成科学计算法,还有不希望丢失任何精度,也不希望四舍五入

#3


该回复于2012-08-13 16:50:08被版主删除

#4


ToString("0.0000000")小数点后面几位数,就写几个0

#5


引用 4 楼  的回复:
ToString("0.0000000")小数点后面几位数,就写几个0
这个方法不行的,数据的值会发生改变,好像会进行四舍五入。
就算这个行得通,还得判断小数点后面有几位。

#6


 float f = 1234567891.24F;            
            Console.WriteLine(f.ToString("0.00"));
你看这个数会变成什么
会变成 1234568000.00
这明摆着进位了。

#7


如果你的数据精度确定的可以推介你这样。。ToString("00.00");格式化一下如果不确定。。。再想想。

#8


Convert.ToString()

#9


Convert.ToString()

#10


楼上的,你看了我上一楼的回复木有。

#11


你经过了装箱 和 拆箱操作,其实在装箱的时候系统就已经处理了,该近位的进位,该指数的指数

后面的一切操作都无济于事

因此,你要改变源头,而不是数据发生变化了,再去还原,本身你要得到原先的不变值,那么就不该这么装箱操作,直接保存成字符串就可以了

#12


Convert.ToInt64()


科学计算法和普通数值一样的功能,为什么要转成普通的呢?便于好看?

#13


直接让这个字段是字符型的,转成数字的时候可以随便处理。

#14


http://www.cnblogs.com/dudu/archive/2011/11/21/2257100.html

#15


string a= object+""

这样看看

#16


引用 6 楼  的回复:
 float f = 1234567891.24F;            
            Console.WriteLine(f.ToString("0.00"));
你看这个数会变成什么
会变成 1234568000.00
这明摆着进位了。

这个没用的
 float f = 1234567891.24F; //float本来就不精确。你可以运行一下下面的代码,对比一下。

 float p1 = 1234567891.24F;
            double p2 = 1234567891.24;
            double p3 = 1234567891.24F;
            Console.WriteLine(p1);
            Console.WriteLine(p2);
            Console.WriteLine(p3);

#17


引用 11 楼  的回复:
你经过了装箱 和 拆箱操作,其实在装箱的时候系统就已经处理了,该近位的进位,该指数的指数

后面的一切操作都无济于事

因此,你要改变源头,而不是数据发生变化了,再去还原,本身你要得到原先的不变值,那么就不该这么装箱操作,直接保存成字符串就可以了
不是的,我调试过的
object的值并非科学计算法,而是tostring之后才变的。

#18


引用 15 楼  的回复:
string a= object+""

这样看看

我建议你用15楼的试试看,我印象中在Excel中 如果纯数字编号超过7、8位的话就会转成科学计数法,在这个后面加上‘,’(逗号或者其他可以区分的) 之后在substring()一下去掉后面的,这个是Excel里常用的处理方法,希望对你有用...

#19


没用的,算了。这个不好处理。
明天让他们换换数据类型

#20


整形/Decimal:直接ToString
浮点:
string format = new string('#', 308) + "0." + new string('#', 308);
然后转换为原先的类型
f.ToString(format)

#21


引用 17 楼  的回复:
引用 11 楼  的回复:

你经过了装箱 和 拆箱操作,其实在装箱的时候系统就已经处理了,该近位的进位,该指数的指数

后面的一切操作都无济于事

因此,你要改变源头,而不是数据发生变化了,再去还原,本身你要得到原先的不变值,那么就不该这么装箱操作,直接保存成字符串就可以了
不是的,我调试过的
object的值并非科学计算法,而是tostring之后才变的。

装箱值已然发生变化
float f = 12313123123.4353f;
            object o = f;// o 1.23131228E+10 object {float}

#22


没装箱拆箱的事,你们想太多了,多看看MSDN吧  http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

http://ideone.com/4nIk2


using System;
 
public class Test
{
        public static void Main()
        {
                float a = 12313123123.4353f;
                Console.WriteLine(a);
                Console.WriteLine(a.ToString("F"));
        }
}


output:
1.231312E+10
12313120000.00

#23


引用 4 楼  的回复:
ToString("0.0000000")小数点后面几位数,就写几个0

MAR看

#24


你的数据无非就是两个整数字中间加了一个小数点而已    
实在不行就先按小数点拆开 把两个整数转化为 ToDecimal 然后再转化为 tostring()相加肯定是不会出现问题的既不会成为科学计算法也不会把你小数点后面的数字干掉

#25


引用 24 楼  的回复:
你的数据无非就是两个整数字中间加了一个小数点而已    
实在不行就先按小数点拆开 把两个整数转化为 ToDecimal 然后再转化为 tostring()相加肯定是不会出现问题的既不会成为科学计算法也不会把你小数点后面的数字干掉
那现在问题是,
目前这个值是类型为float存在object类型的变量里,
我肿么把这个值根据小数点拆开两个??再进行你说的处理方法?

#26


无语了,还没看懂,你在ToString或string.format里面加个”F"就是定点数输出了,默认是定点或科学计数中最短的那个

#27


是不是就是想转换成string类型,直接用DecimalFormat类转换就可以了。

#28


真tm的搞笑,正确答案不采纳,瞎扯淡的倒给了那么多分

#1


是不是在装箱之前就以经变成科学计数法了?

如果之前有转换的话,把Convert.ToDouble换成Convert.ToDecimal试试

#2


装箱之前的代码我无从改,
我现在只能通过typeof这个object变量,然后根据类型再去还原最原始的值,
现在的问题就是我不需要显示成科学计算法,还有不希望丢失任何精度,也不希望四舍五入

#3


该回复于2012-08-13 16:50:08被版主删除

#4


ToString("0.0000000")小数点后面几位数,就写几个0

#5


引用 4 楼  的回复:
ToString("0.0000000")小数点后面几位数,就写几个0
这个方法不行的,数据的值会发生改变,好像会进行四舍五入。
就算这个行得通,还得判断小数点后面有几位。

#6


 float f = 1234567891.24F;            
            Console.WriteLine(f.ToString("0.00"));
你看这个数会变成什么
会变成 1234568000.00
这明摆着进位了。

#7


如果你的数据精度确定的可以推介你这样。。ToString("00.00");格式化一下如果不确定。。。再想想。

#8


Convert.ToString()

#9


Convert.ToString()

#10


楼上的,你看了我上一楼的回复木有。

#11


你经过了装箱 和 拆箱操作,其实在装箱的时候系统就已经处理了,该近位的进位,该指数的指数

后面的一切操作都无济于事

因此,你要改变源头,而不是数据发生变化了,再去还原,本身你要得到原先的不变值,那么就不该这么装箱操作,直接保存成字符串就可以了

#12


Convert.ToInt64()


科学计算法和普通数值一样的功能,为什么要转成普通的呢?便于好看?

#13


直接让这个字段是字符型的,转成数字的时候可以随便处理。

#14


http://www.cnblogs.com/dudu/archive/2011/11/21/2257100.html

#15


string a= object+""

这样看看

#16


引用 6 楼  的回复:
 float f = 1234567891.24F;            
            Console.WriteLine(f.ToString("0.00"));
你看这个数会变成什么
会变成 1234568000.00
这明摆着进位了。

这个没用的
 float f = 1234567891.24F; //float本来就不精确。你可以运行一下下面的代码,对比一下。

 float p1 = 1234567891.24F;
            double p2 = 1234567891.24;
            double p3 = 1234567891.24F;
            Console.WriteLine(p1);
            Console.WriteLine(p2);
            Console.WriteLine(p3);

#17


引用 11 楼  的回复:
你经过了装箱 和 拆箱操作,其实在装箱的时候系统就已经处理了,该近位的进位,该指数的指数

后面的一切操作都无济于事

因此,你要改变源头,而不是数据发生变化了,再去还原,本身你要得到原先的不变值,那么就不该这么装箱操作,直接保存成字符串就可以了
不是的,我调试过的
object的值并非科学计算法,而是tostring之后才变的。

#18


引用 15 楼  的回复:
string a= object+""

这样看看

我建议你用15楼的试试看,我印象中在Excel中 如果纯数字编号超过7、8位的话就会转成科学计数法,在这个后面加上‘,’(逗号或者其他可以区分的) 之后在substring()一下去掉后面的,这个是Excel里常用的处理方法,希望对你有用...

#19


没用的,算了。这个不好处理。
明天让他们换换数据类型

#20


整形/Decimal:直接ToString
浮点:
string format = new string('#', 308) + "0." + new string('#', 308);
然后转换为原先的类型
f.ToString(format)

#21


引用 17 楼  的回复:
引用 11 楼  的回复:

你经过了装箱 和 拆箱操作,其实在装箱的时候系统就已经处理了,该近位的进位,该指数的指数

后面的一切操作都无济于事

因此,你要改变源头,而不是数据发生变化了,再去还原,本身你要得到原先的不变值,那么就不该这么装箱操作,直接保存成字符串就可以了
不是的,我调试过的
object的值并非科学计算法,而是tostring之后才变的。

装箱值已然发生变化
float f = 12313123123.4353f;
            object o = f;// o 1.23131228E+10 object {float}

#22


没装箱拆箱的事,你们想太多了,多看看MSDN吧  http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

http://ideone.com/4nIk2


using System;
 
public class Test
{
        public static void Main()
        {
                float a = 12313123123.4353f;
                Console.WriteLine(a);
                Console.WriteLine(a.ToString("F"));
        }
}


output:
1.231312E+10
12313120000.00

#23


引用 4 楼  的回复:
ToString("0.0000000")小数点后面几位数,就写几个0

MAR看

#24


你的数据无非就是两个整数字中间加了一个小数点而已    
实在不行就先按小数点拆开 把两个整数转化为 ToDecimal 然后再转化为 tostring()相加肯定是不会出现问题的既不会成为科学计算法也不会把你小数点后面的数字干掉

#25


引用 24 楼  的回复:
你的数据无非就是两个整数字中间加了一个小数点而已    
实在不行就先按小数点拆开 把两个整数转化为 ToDecimal 然后再转化为 tostring()相加肯定是不会出现问题的既不会成为科学计算法也不会把你小数点后面的数字干掉
那现在问题是,
目前这个值是类型为float存在object类型的变量里,
我肿么把这个值根据小数点拆开两个??再进行你说的处理方法?

#26


无语了,还没看懂,你在ToString或string.format里面加个”F"就是定点数输出了,默认是定点或科学计数中最短的那个

#27


是不是就是想转换成string类型,直接用DecimalFormat类转换就可以了。

#28


真tm的搞笑,正确答案不采纳,瞎扯淡的倒给了那么多分