簡體   English   中英

在Java中將double轉換為String,反之亦然,而不會失去准確性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM