[英]Convert a double to a String in Java and vice versa without losing accuracy
雙 字符串表示形式由C#應用程序寫入文件並從文件中讀取。
C#應用程序使用以下片段將double轉換為字符串:
value.ToString("R", NumberFormatInfo.InvariantInfo);
C#應用程序使用以下片段將字符串轉換為double
double num = double.Parse(s, NumberStyles.Float, (IFormatProvider) NumberFormatInfo.InvariantInfo);
如果要將相同的文件寫入Java應用程序並從中讀取,那么如何在不丟失數據的情況下轉換類型?
我相信,使用Double.parseDouble()
和Double.toString()
應該可以在不丟失數據的情況下工作。 特別是,從Double.toString()
的文檔:
m或a的小數部分必須打印多少位? 必須至少有一個數字來表示小數部分,並且除此之外必須有多個,但只有多少,更多的數字才能唯一地將參數值與double類型的相鄰值區分開來。 也就是說,假設x是由該方法為有限非零參數d生成的十進制表示所表示的精確數學值。 那么d必須是最接近x的double值; 或者如果兩個double值同樣接近x,則d必須是其中之一,d的有效位的最低有效位必須為0。
另一種選擇,如果你想保留確切的字符串表示(這不是完全相同的話),就是在Java中使用BigDecimal
。
雙打精度有限,可能無法完整保留字符串。 BigDecimal類具有任意的精確性並保持表示。
要將字符串轉換為BigDecimal:
BigDecimal d = new BigDecimal("10.1234567890");
要將BigDecimal轉換為字符串:
System.out.println(d.toString());
更多細節: http : //epramono.blogspot.com/2005/01/double-vs-bigdecimal.html
您是否需要用於任何目的的字符串表示,或者它僅用於文本數據傳輸(例如,SOAP / REST消息)?
對於后者,您可以使用java.lang.Double.doubleToRawLongBits(double value)
將double值轉換為long,並使用java.lang.Double.longBitsToDouble(long value)
將其轉換為double。 您可以將長值作為十六進制編碼的字符串傳輸。
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 /爪哇/郎/ Double.html#longBitsToDouble(長)
這將保留您擁有的精確64位雙精度值,但它不會是人類可讀的(對於大多數!;))。
只需要使用Java Double包裝類,即大寫“D”“Double”
int String s = Double.toString(yourDoubleVariable);
從double到String:
String stringValue = Double.toString(value);
從String到double
double doubleValue = Double.valueOf(value);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.