Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
61c7f9b6
Kaydet (Commit)
61c7f9b6
authored
Kas 23, 2012
tarafından
Norbert Thiebaud
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
spin Scientific formatting in its own imp function
Change-Id: I8d9e0d01642c04ca7742b68e8926b3966418f841
üst
ad62ed4c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
120 additions
and
98 deletions
+120
-98
zformat.hxx
svl/inc/svl/zformat.hxx
+3
-0
zformat.cxx
svl/source/numbers/zformat.cxx
+117
-98
No files found.
svl/inc/svl/zformat.hxx
Dosyayı görüntüle @
61c7f9b6
...
@@ -617,6 +617,9 @@ private:
...
@@ -617,6 +617,9 @@ private:
SVL_DLLPRIVATE
bool
ImpGetFractionOutput
(
double
fNumber
,
SVL_DLLPRIVATE
bool
ImpGetFractionOutput
(
double
fNumber
,
sal_uInt16
nIx
,
sal_uInt16
nIx
,
String
&
OutString
);
String
&
OutString
);
SVL_DLLPRIVATE
bool
ImpGetScientificOutput
(
double
fNumber
,
sal_uInt16
nIx
,
String
&
OutString
);
SVL_DLLPRIVATE
bool
ImpGetDateOutput
(
double
fNumber
,
SVL_DLLPRIVATE
bool
ImpGetDateOutput
(
double
fNumber
,
sal_uInt16
nIx
,
sal_uInt16
nIx
,
...
...
svl/source/numbers/zformat.cxx
Dosyayı görüntüle @
61c7f9b6
...
@@ -2538,7 +2538,6 @@ bool SvNumberformat::GetOutputString(double fNumber,
...
@@ -2538,7 +2538,6 @@ bool SvNumberformat::GetOutputString(double fNumber,
{
{
case
NUMBERFORMAT_TEXT
:
case
NUMBERFORMAT_TEXT
:
case
NUMBERFORMAT_DEFINED
:
case
NUMBERFORMAT_DEFINED
:
{
for
(
sal_uInt16
i
=
0
;
i
<
nAnz
;
i
++
)
for
(
sal_uInt16
i
=
0
;
i
<
nAnz
;
i
++
)
{
{
switch
(
rInfo
.
nTypeArray
[
i
])
switch
(
rInfo
.
nTypeArray
[
i
])
...
@@ -2561,14 +2560,15 @@ bool SvNumberformat::GetOutputString(double fNumber,
...
@@ -2561,14 +2560,15 @@ bool SvNumberformat::GetOutputString(double fNumber,
break
;
break
;
case
NF_SYMBOLTYPE_THSEP
:
case
NF_SYMBOLTYPE_THSEP
:
if
(
rInfo
.
nThousand
==
0
)
if
(
rInfo
.
nThousand
==
0
)
{
OutString
+=
rInfo
.
sStrArray
[
i
];
OutString
+=
rInfo
.
sStrArray
[
i
];
}
break
;
break
;
default
:
default
:
break
;
break
;
}
}
}
}
}
break
;
break
;
case
NUMBERFORMAT_DATE
:
case
NUMBERFORMAT_DATE
:
bRes
|=
ImpGetDateOutput
(
fNumber
,
nIx
,
OutString
);
bRes
|=
ImpGetDateOutput
(
fNumber
,
nIx
,
OutString
);
break
;
break
;
...
@@ -2586,113 +2586,132 @@ bool SvNumberformat::GetOutputString(double fNumber,
...
@@ -2586,113 +2586,132 @@ bool SvNumberformat::GetOutputString(double fNumber,
case
NUMBERFORMAT_FRACTION
:
case
NUMBERFORMAT_FRACTION
:
bRes
|=
ImpGetFractionOutput
(
fNumber
,
nIx
,
OutString
);
bRes
|=
ImpGetFractionOutput
(
fNumber
,
nIx
,
OutString
);
break
;
break
;
break
;
case
NUMBERFORMAT_SCIENTIFIC
:
case
NUMBERFORMAT_SCIENTIFIC
:
bRes
|=
ImpGetScientificOutput
(
fNumber
,
nIx
,
OutString
);
break
;
}
}
return
bRes
;
}
bool
SvNumberformat
::
ImpGetScientificOutput
(
double
fNumber
,
sal_uInt16
nIx
,
String
&
OutString
)
{
bool
bRes
=
false
;
bool
bSign
=
false
;
const
ImpSvNumberformatInfo
&
rInfo
=
NumFor
[
nIx
].
Info
();
const
sal_uInt16
nAnz
=
NumFor
[
nIx
].
GetCount
();
if
(
fNumber
<
0
)
{
if
(
nIx
==
0
)
// nicht in hinteren
{
{
bool
bSign
=
false
;
bSign
=
true
;
// Formaten
if
(
fNumber
<
0
)
}
{
fNumber
=
-
fNumber
;
if
(
nIx
==
0
)
// nicht in hinteren
}
bSign
=
true
;
// Formaten
fNumber
=
-
fNumber
;
}
String
sStr
(
::
rtl
::
math
::
doubleToUString
(
fNumber
,
rtl_math_StringFormat_E
,
rInfo
.
nCntPre
+
rInfo
.
nCntPost
-
1
,
'.'
));
String
ExpStr
;
String
sStr
(
::
rtl
::
math
::
doubleToUString
(
fNumber
,
short
nExpSign
=
1
;
rtl_math_StringFormat_E
,
xub_StrLen
nExPos
=
sStr
.
Search
(
'E'
);
rInfo
.
nCntPre
+
rInfo
.
nCntPost
-
1
,
'.'
));
if
(
nExPos
!=
STRING_NOTFOUND
)
String
ExpStr
;
{
short
nExpSign
=
1
;
// split into mantisse and exponent and get rid of "E+" or "E-"
xub_StrLen
nExPos
=
sStr
.
Search
(
'E'
);
xub_StrLen
nExpStart
=
nExPos
+
1
;
switch
(
sStr
.
GetChar
(
nExpStart
)
)
{
case
'-'
:
nExpSign
=
-
1
;
// fallthru
case
'+'
:
++
nExpStart
;
break
;
}
ExpStr
=
sStr
.
Copy
(
nExpStart
);
// part following the "E+"
sStr
.
Erase
(
nExPos
);
// cut any decimal delimiter
sStr
=
comphelper
::
string
::
remove
(
sStr
,
'.'
);
if
(
rInfo
.
nCntPre
!=
1
)
// rescale Exp
{
sal_Int32
nExp
=
ExpStr
.
ToInt32
()
*
nExpSign
;
nExp
-=
sal_Int32
(
rInfo
.
nCntPre
)
-
1
;
if
(
nExp
<
0
)
{
nExpSign
=
-
1
;
nExp
=
-
nExp
;
}
else
{
nExpSign
=
1
;
}
ExpStr
=
String
::
CreateFromInt32
(
nExp
);
}
}
sal_uInt16
j
=
nAnz
-
1
;
// last symbol
xub_StrLen
k
;
// position in ExpStr
bRes
|=
ImpNumberFill
(
ExpStr
,
fNumber
,
k
,
j
,
nIx
,
NF_SYMBOLTYPE_EXP
);
xub_StrLen
nZeros
=
0
;
// erase leading zeros
if
(
nExPos
!=
STRING_NOTFOUND
)
while
(
nZeros
<
k
&&
ExpStr
.
GetChar
(
nZeros
)
==
'0'
)
{
{
// split into mantisse and exponent and get rid of "E+" or "E-"
++
nZeros
;
xub_StrLen
nExpStart
=
nExPos
+
1
;
}
if
(
nZeros
)
switch
(
sStr
.
GetChar
(
nExpStart
)
)
{
{
ExpStr
.
Erase
(
0
,
nZeros
);
case
'-'
:
}
nExpSign
=
-
1
;
bool
bCont
=
true
;
// fallthru
if
(
rInfo
.
nTypeArray
[
j
]
==
NF_SYMBOLTYPE_EXP
)
case
'+'
:
{
++
nExpStart
;
const
String
&
rStr
=
rInfo
.
sStrArray
[
j
];
break
;
if
(
nExpSign
==
-
1
)
}
{
ExpStr
=
sStr
.
Copy
(
nExpStart
);
// part following the "E+"
ExpStr
.
Insert
(
'-'
,
0
);
sStr
.
Erase
(
nExPos
);
}
// cut any decimal delimiter
else
if
(
rStr
.
Len
()
>
1
&&
rStr
.
GetChar
(
1
)
==
'+'
)
sStr
=
comphelper
::
string
::
remove
(
sStr
,
'.'
);
{
if
(
rInfo
.
nCntPre
!=
1
)
// rescale Exp
ExpStr
.
Insert
(
'+'
,
0
);
{
}
sal_Int32
nExp
=
ExpStr
.
ToInt32
()
*
nExpSign
;
ExpStr
.
Insert
(
rStr
.
GetChar
(
0
),
0
);
if
(
j
)
nExp
-=
sal_Int32
(
rInfo
.
nCntPre
)
-
1
;
{
if
(
nExp
<
0
)
j
--
;
}
else
{
bCont
=
false
;
}
}
// weiter Hauptzahl:
if
(
!
bCont
)
{
{
sStr
.
Erase
();
nExpSign
=
-
1
;
nExp
=
-
nExp
;
}
}
else
else
{
{
k
=
sStr
.
Len
();
// hinter letzter Ziffer
nExpSign
=
1
;
bRes
|=
ImpNumberFillWithThousands
(
sStr
,
fNumber
,
k
,
j
,
nIx
,
rInfo
.
nCntPre
+
rInfo
.
nCntPost
);
}
if
(
bSign
)
{
sStr
.
Insert
(
'-'
,
0
);
}
}
OutString
=
sStr
;
ExpStr
=
String
::
CreateFromInt32
(
nExp
);
OutString
+=
ExpStr
;
}
}
break
;
}
sal_uInt16
j
=
nAnz
-
1
;
// last symbol
xub_StrLen
k
;
// position in ExpStr
xub_StrLen
nZeros
=
0
;
// erase leading zeros
bRes
|=
ImpNumberFill
(
ExpStr
,
fNumber
,
k
,
j
,
nIx
,
NF_SYMBOLTYPE_EXP
);
while
(
nZeros
<
k
&&
ExpStr
.
GetChar
(
nZeros
)
==
'0'
)
{
++
nZeros
;
}
if
(
nZeros
)
{
ExpStr
.
Erase
(
0
,
nZeros
);
}
bool
bCont
=
true
;
if
(
rInfo
.
nTypeArray
[
j
]
==
NF_SYMBOLTYPE_EXP
)
{
const
String
&
rStr
=
rInfo
.
sStrArray
[
j
];
if
(
nExpSign
==
-
1
)
{
ExpStr
.
Insert
(
'-'
,
0
);
}
else
if
(
rStr
.
Len
()
>
1
&&
rStr
.
GetChar
(
1
)
==
'+'
)
{
ExpStr
.
Insert
(
'+'
,
0
);
}
ExpStr
.
Insert
(
rStr
.
GetChar
(
0
),
0
);
if
(
j
)
{
j
--
;
}
else
{
bCont
=
false
;
}
}
}
}
// weiter Hauptzahl:
if
(
!
bCont
)
{
sStr
.
Erase
();
}
else
{
k
=
sStr
.
Len
();
// hinter letzter Ziffer
bRes
|=
ImpNumberFillWithThousands
(
sStr
,
fNumber
,
k
,
j
,
nIx
,
rInfo
.
nCntPre
+
rInfo
.
nCntPost
);
}
if
(
bSign
)
{
sStr
.
Insert
(
'-'
,
0
);
}
OutString
=
sStr
;
OutString
+=
ExpStr
;
return
bRes
;
return
bRes
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment