C#中將double變數格式化為字串,且保留小數點後面的全部位數
原文:
【問題】
C#中已經獲得一個double變數值,比如1343392590725.6758,然後想要將其轉換為字串,且保留全部的小數點後的4位,但是結果卻是:
?1 2 3 4 5 6 7 8 9 10 11 |
private
void doubleToStringTest()
{
double
curMilliSecDouble = 1343392590725.6758;
//double curMilliSecDouble = crl.getCurTimeInMillisec(); //1343392590725.6758
string
curMilliSecStrF = curMilliSecDouble.ToString( "%.4f" );
//%1343404742649074f
string
curMilliSecStrG = curMilliSecDouble.ToString( "G" );
//1343404742649.07
string
curMilliSecStrG4 = curMilliSecDouble.ToString( "G4" );
//1.343E+12
string
curMilliSecStr00 = curMilliSecDouble.ToString( "0.0000" );
//1343404742649.0700
string
curMilliSecStrF6 = curMilliSecDouble.ToString( "f6" );
//1343392590725.680000
string
curMilliSecStr = curMilliSecDouble.ToString();
//1343404742649.07
}
|
始終都不能顯示出4位的小數。
【解決過程】
2.後來好不容易找到了微軟官方教程:標準數值格式字串,並寫出了上述測試程式碼,但是始終還是隻是輸出小數點後2位。
3.網上這人也遇到了類似問題:
但是沒人解釋的清楚.
5.參考這裡去用Math.Round:
?1 |
string
roundedDoubleStr = Math.Round(curMilliSecDouble, 4).ToString(); |
結果輸出還是1343392590725.68,而不是所希望的1343392590725.6758
6.參考這裡去試了是#:
?1 |
string
curMilliSecStrXing = curMilliSecDouble.ToString( "#.####" );
//1343392590725.68
|
結果問題依舊。
然後可以看出,對於:1343392590725.6758
其共17位數字,整數部分13位,小數部分4位
然後就去故意測試少一位的情況,比如:
343392590725.6758
此double值,其共16位數字,整數部分12位,小數部分4位
然後測試結果就是可以再多輸出一位小數的:
?1 2 3 4 |
double
less1BitDouble = 343392590725.6758;
string
less1BitDoubleStrG = less1BitDouble.ToString( "G" );
//"343392590725.676"
string
less1BitDoubleStrF = less1BitDouble.ToString( "F" );
//"343392590725.68"
string
less1BitDoubleStrF6 = less1BitDouble.ToString( "F6" );
//"343392590725.676000"
|
後來又去試了試用更小一點的double值去測試:
?1 2 3 4 |
double
smallValDouble = 1234.567890;
string
smallValDoubleStrG = smallValDouble.ToString( "G" );
//1234.56789
string
smallValDoubleStrF = smallValDouble.ToString( "F" );
//1234.57
string
smallValDoubleStrF6 = smallValDouble.ToString( "F6" );
//1234.567890
|
結果很明顯,是可以安裝所期望的正常輸出的:
F:預設是2位小數點
F6:輸出小數點後6位,不夠的話用0補齊
G:預設輸出原先的,保留小數點後面的位數(對於double預設是最多15個,詳見:標準數值格式字串)。
【總結】
此處像1343392590725.6758一樣的double值,不論去用ToString格式化輸出,不論引數是F還是G,還是FN或GN,結果都還是2位的小數點,其原因在此double值太大了,總的位數,正好是13+4=17,而實際上內部最多隻能存15位,所以實際上小數點後面只有2位,所以輸出的時候,始終只能輸出2位,正巧和F引數預設輸出2位所吻合,所以以為F和G等引數沒有實際生效呢。
相關推薦
C#中將double變數格式化為字串,且保留小數點後面的全部位數
原文: 【問題】 C#中已經獲得一個double變數值,比如1343392590725.6758,然後想要將其轉換為字串,且保留全部的小數點後的4位,但是結果卻是: ? 1 2 3 4 5 6 7 8 9 10 11 private void doubleTo
C語言從控制檯輸入一個字串,然後賦值給變數
一、常規程式碼: char name[5]; printf("Name: "); scanf("%s", name); printf("Name = %s\n", name); 測試: 1、輸入“abc”, 輸出“abc”,正確 2、輸入“ab c”, 輸出“ab”, 出
SimpleDateFormat得到年月日格式的字串,再轉為int型別
1.年月日 public static void main(String[] args) { SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd"); int nowDay = Integer.parse
c語言判斷是否是utf8字串,計算字元個數
#include <stdio.h> #include <string.h> #include <stdlib.h> /******************************************************************
ACMNO.40 C語言-子串 有一字串,包含n個字元。寫一函式,將此字串中從第m個字元開始的全部字元複製成為另一個字串
題目描述 有一字串,包含n個字元。 寫一函式,將此字串中從第m個字元開始的全部字元複製成為另一個字串。 輸入 數字n 一行字串 數字m 輸出 從m開始的子串 樣例輸入 6 abcdef 3 樣例輸出 cdef 來源/分類 C語言
【C語言】輸入三個字串,由小到大排序輸出。
仔細觀察下面程式: #include <stdio.h> #include <string.h> void swap(char *p1,char *p2) { char *ret = p1; p1 = p2;
C#中將string型別的json字串轉化成陣列
新增引用 using Newtonsoft.Json.Linq; using Newtonsoft.Json; using System.Collections.Generic; string jsonText = {"Total":"0", "Rows": [ { "
【C實現】給出一個字串,要求將其按照單詞順序進行反轉
題目:給出一個字串,要求將其按照單詞順序進行反轉,比如如果是”the sky is blue”,那麼反轉之後的結果就是”blue is sky the”。 問題分析: 每個單詞長度不一致 空格需要
C++將整形變數轉換為字串
#include <iostream> #include <string> #include <sstream> using namespace std; strin
用字元指標變數指向一個字串,然後輸出字元及其長度
#include<stdio.h> #include<string.h> // 要使用strlen函式 int main() { char *p; p =
將UIBezierPath存為自定義格式的字串,再將字串轉為UIBezierPath
<pre name="code" class="objc">自定義字串格式為:@"123.02,234.23|321.23,432.0002|543.0003,432.0045|654.0034,567.0034|23.3443,56.0034|77.3440,
python中大於0的元素全部轉化為1,小於0的元素全部轉化為0的代碼
pre post class body col 元素 span print color 【code】 """ 大於0的元素全部轉化為1 """ np_arr = np.array([[1 ,2, 3, 4]]) print("轉化前:") print(np_arr) pr
C++:從鍵盤輸入一個整數,判斷該數是幾位數,並且逆向輸出該數字
#include using namespace std; int change(int n) //逆向輸出該數 {int rn; for(int i=0;i<10;i++) { if(n>0) { rn=rn*10+n%10; n=n/10;
jsjs字串每三位加逗號,並保留小數點部分
/** * Created by dcp on 2018/9/28. */ // 寫程式碼實現一個 cut 函式cut(3123123123.123); //3,123,123,123.123
Java指定長度隨機生成的字串,且這個字串必須包含大小寫字母和數字
public static String gen(int length) { char[] ss = new char[length]; int i=0; while(i<length) { int f = (int) (Math.random()*3);
批處理替換文字檔案中的字串,並保留換行
@echo on REM --- File Name:ReplaceString.bat----- REM ---Call Method---- REM ---ReplaceString "SrcFileName" "TargetFileName" "SrcStr" "TargetStr" ---- s
JS匯出Excel,相容IE,且保留樣式
var tableHtml='<html><head><meta charset="UTF-8"></head><body>'; tableHtml += lHtml; tableHtml += '
double和BigDecimal互相轉換及保留小數點後的位數
1,保留6位小數點NumberFormat format = NumberFormat.getInstance(); format.setMinimumFractionDigits(6); String s= format.format(double/BigDecimal);
如果整數A 的全部因子(包括1,不包括A本身)之和等於B,且整數B的全部 因子包括1,不包括B 本身)之和等於A,則稱整數A\B是一對親密數。 求3000 以內的全部親密數。
public class Text親密數 {//主函式public static void main(String[] args) {for(int a=2;a<3000;a++) {int b=sum(a);//將sum(a)的值賦值給b
JS控制文本框只能輸入數字,並且保留小數點後兩位
文本 只能輸入數字 rep max light 清除 style input paste <input type="text" placeholder="保留到小數點後兩位" maxlength="200" onkeyup="num(this)" onpaste