甲字符串一个的表示双写入和从由文件读C#应用.
C#应用程序使用以下片段将double转换为字符串:
value.ToString("R", NumberFormatInfo.InvariantInfo);
Run Code Online (Sandbox Code Playgroud)
C#应用程序使用以下片段将字符串转换为double
double num = double.Parse(s, NumberStyles.Float, (IFormatProvider) NumberFormatInfo.InvariantInfo);
Run Code Online (Sandbox Code Playgroud)
如果要将相同的文件写入Java应用程序并从中读取,那么如何在不丢失数据的情况下转换类型?
Jon*_*eet 13
我相信,只是使用Double.parseDouble()并且Double.toString()应该工作而不会丢失数据.特别是,从以下文档Double.toString():
m或a的小数部分必须打印多少位?必须至少有一个数字来表示小数部分,并且除此之外必须有多个,但只需要多少,更多的数字来唯一地区分参数值和double类型的相邻值.也就是说,假设x是由该方法为有限非零参数d生成的十进制表示所表示的精确数学值.那么d必须是最接近x的double值; 或者如果两个double值同样接近x,则d必须是其中之一,d的有效位的最低有效位必须为0.
另一种选择,如果你想保留确切的字符串表示(这不是完全相同的东西)是BigDecimal在Java中使用.
双打精度有限,可能无法完整保留字符串.BigDecimal类具有任意的精确性并保持表示.
要将字符串转换为BigDecimal:
BigDecimal d = new BigDecimal("10.1234567890");
Run Code Online (Sandbox Code Playgroud)
要将BigDecimal转换为字符串:
System.out.println(d.toString());
Run Code Online (Sandbox Code Playgroud)
更多细节:http: //epramono.blogspot.com/2005/01/double-vs-bigdecimal.html
您是否出于任何目的需要字符串表示形式,还是仅用于文本数据传输(例如SOAP / REST消息)?
对于后者,您可以将double值转换为long using java.lang.Double.doubleToRawLongBits(double value),然后再转换为double use java.lang.Double.longBitsToDouble(long value)。您可以将long值作为十六进制编码的字符串进行传输。
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Double.html#doubleToRawLongBits(double) http://java.sun.com/j2se/1.5.0/docs/ api / java / lang / Double.html#longBitsToDouble(long)
这将保留您所拥有的准确的64位double值,但它对于人类来说不是可读的(对于大多数!;))。
| 归档时间: |
|
| 查看次数: |
28529 次 |
| 最近记录: |